JSON 파싱 된 개체를 인쇄 하시겠습니까?


200

JSON을 사용하여 파싱 된 자바 스크립트 객체가 있습니다. JSON.parse이제 객체를 인쇄하여 디버깅 할 수 있습니다 (함수가 잘못되었습니다). 내가 다음을 할 때 ...

for (property in obj) {
    output += property + ': ' + obj[property]+'; ';
}
console.log(output);

여러 [object Object]가 나열되어 있습니다. 내용을보기 위해 이것을 어떻게 인쇄 할까 궁금합니다.


5
참고로 for (obj의 속성)에는 상속 된 속성까지 모든 속성이 나열됩니다. 따라서 Object.prototype과 모든 '어머니 클래스'에 대한 많은 외래 적 인 하나를 얻을 수 있습니다. 이것은 json 객체에 불편합니다. 이 객체가 소유 한 속성 만 가져 오려면 hasOwnProperty ()로 필터링해야합니다.
BiAiB

답변:


124

대부분의 디버거 콘솔은 객체 표시를 직접 지원합니다. 그냥 사용

console.log(obj);

디버거에 따라 콘솔의 객체가 축소 된 트리로 표시 될 가능성이 높습니다. 트리를 열고 개체를 검사 할 수 있습니다.


122
크롬 (및 아마도 다른 브라우저)에서 다음과 같은 문자열과 결합 console.log("object: " + obj)되면 객체를 표시하지 않고 대신 "object : [Object obj]"를 출력 한다는 점을 언급 할 가치가 있습니다.
Shahar

24
@Shahar console.log("object: %O", obj)(Chrome) 또는 console.log("object: %o", obj)(Firefox | Safari)를 사용하면 객체 세부 정보에 액세스 할 수 있습니다. 아래 답변을 참조하십시오.
Dave Anderson

1
@DaveAnderson 콘솔의 객체 형식에 적합합니다.
lekant

@Shahar 감사합니다. 귀하의 정보는 내가 필요한 정보였습니다. 답변에 추가해야합니다.
Leo Flaherty

3
@DaveAnderson의 방법 외에도 쉼표를 사용하여 문자열을 객체와 분리 할 수도 있습니다.console.log("My object: ", obj)
Shahar

571

JSON의 의미를 알고 있습니까? 자바 스크립트 객체 표기법 . 객체에 적합한 형식을 만듭니다.

JSON.stringify(obj) 객체의 문자열 표현을 다시 제공합니다.


12
나는이 답변이 맨 아래에 있다는 사실에 놀랐다. 이것은 받아 들여지는 답변이어야한다 :-)
Mingyu

1
문자열 표현을 원하지 않고 코드 편집기에 표시되는 객체를 원한다면 어떻게해야합니까?
SuperUberDuper

5
@SuperUberDuper : ... 그러면 문자열 표현을 만들려고하지 않을 것입니다. :)
cHao

SuperUberDuper가 객체를 문자열로 변환하지 않고 기록하거나 볼 수 있는지 묻고 있다고 생각합니다. 브라우저에서 DOM에 요소가 필요한 경우 json을 문자열 화하고 요소 내용 innerHTML을 해당 문자열로 설정하여 페이지에서 볼 수 있습니다.
jasonleonhard

예를 들면 다음과 같습니다. import Json from './data.json'; var el = document.createElement ( 'div'); el.innerHTML = JSON.stringify (Json);
jasonleonhard

54

console.dir()대신 시도하십시오console.log()

console.dir(obj);

MDN 은 다음 console.dir()에 의해 지원 된다고 말합니다 .

  • FF8 +
  • IE9 +
  • 오페라
  • 크롬
  • 원정 여행

1
IE9 +에서만 사용 가능
Jasonscript

3
console.dir()FF8 +, Opera, Chrome 및 Safari에서도 사용할 수 있습니다. developer.mozilla.org/en-US/docs/Web/API/console.dir
olibre

큰! 이것은 나에게 가장 적합한 솔루션입니다. 감사.
Hoang Le

1
노드 js는 어떻습니까?
Xsmael

good, 그러나 log ( "string"+ variable)와 같은 문자열 연결을 지원하지 않습니다
Nassim

47

들여 쓰기가있는 예쁘고 여러 줄짜리 JSON을 원한다면 JSON.stringify세 번째 인수와 함께 사용할 수 있습니다 .

JSON.stringify(value[, replacer[, space]])

예를 들면 다음과 같습니다.

var obj = {a:1,b:2,c:{d:3, e:4}};

JSON.stringify(obj, null, "    ");

또는

JSON.stringify(obj, null, 4);

다음과 같은 결과가 나타납니다.

"{
    "a": 1,
    "b": 2,
    "c": {
        "d": 3,
        "e": 4
    }
}"

브라우저 console.log(obj)에서는 더 잘 작동하지만 쉘 콘솔 (node.js)에서는 그렇지 않습니다.



25

문자열 형식을 사용하십시오.

console.log("%s %O", "My Object", obj);

Chrome에는 다음과 같은 형식 지정자가 있습니다.

  • %s 값을 문자열로 형식화합니다.
  • %d또는 %i값을 정수로 형식화합니다.
  • %f 값을 부동 소수점 값으로 형식화합니다.
  • %o 요소 패널에서와 같이 값을 확장 가능한 DOM 요소로 형식화합니다.
  • %O 값을 확장 가능한 JavaScript 객체로 형식화합니다.
  • %c 제공하는 CSS 스타일에 따라 출력 문자열을 형식화합니다.

Firefox 에는 비슷한 옵션 이있는 String Substition 도 있습니다.

  • %oJavaScript 객체에 대한 하이퍼 링크를 출력합니다. 링크를 클릭하면 관리자가 열립니다.
  • %d또는 %i정수를 출력합니다. 포맷은 아직 지원되지 않습니다.
  • %s 문자열을 출력합니다.
  • %f부동 소수점 값을 출력합니다. 포맷은 아직 지원되지 않습니다.

Safari에는 printf 스타일 포맷터가 있습니다

  • %d또는 %i정수
  • %[0.N]f N 자릿수의 부동 소수점 값
  • %o 목적
  • %s

1
좋은 참조 답변
David

1
% O 님이 정말 유용합니다
everton

4

좋고 간단합니다 :

console.log("object: %O", obj)

1
% O는 무엇을 설명해 주시겠습니까? 구체적으로 O 여야합니까? -솔루션이 매력처럼 작동
Anthonius

O는 객체를 나타내며, 객체가 문자열로 인쇄 될 수있는 한 문제없이 인쇄되어야합니다. 이것은 오류가 어디에 있는지 확실하지 않은 많은 경우에 문제를 해결하는 데 도움이되었습니다.
mbenhalima

여기에 알려주는 것을 잊었습니다. 실제로 % O를 사용할 필요는 없습니다. 우리는 직접 console.log ( "object :", obj)를 사용할 수 있습니다. @mbenhalima
Anthonius

3

그냥 사용

console.info("CONSOLE LOG : ")
console.log(response);
console.info("CONSOLE DIR : ")
console.dir(response);

그리고 당신은 크롬 콘솔에서 이것을 얻을 것입니다 :

CONSOLE LOG : 
facebookSDK_JS.html:56 Object {name: "Diego Matos", id: "10155988777540434"}
facebookSDK_JS.html:57 CONSOLE DIR : 
facebookSDK_JS.html:58 Objectid: "10155988777540434"name: "Diego Matos"__proto__: Object

2

객체 나 배열의 내용을 경고하는 간단한 기능.
배열이나 문자열 또는 내용을 경고하는 객체로이 함수를 호출하십시오.

함수

function print_r(printthis, returnoutput) {
    var output = '';

    if($.isArray(printthis) || typeof(printthis) == 'object') {
        for(var i in printthis) {
            output += i + ' : ' + print_r(printthis[i], true) + '\n';
        }
    }else {
        output += printthis;
    }
    if(returnoutput && returnoutput == true) {
        return output;
    }else {
        alert(output);
    }
}

용법

var data = [1, 2, 3, 4];
print_r(data);

2

다음 코드는 경고 상자에 완전한 JSON 데이터를 표시합니다

var data= '{"employees":[' +
'{"firstName":"John","lastName":"Doe" },' +
'{"firstName":"Anna","lastName":"Smith" },' +
'{"firstName":"Peter","lastName":"Jones" }]}';

json = JSON.parse(data);
window.alert(JSON.stringify(json));

2

디버그하려는 경우 콘솔 디버그를 사용하지 않는 이유

window.console.debug(jsonObject);

0

서버에서 js로 작업하는 경우 약간의 체조가 먼 길을갑니다 ... 여기 내 ppos (pretty-print-on-server) :

ppos = (object, space = 2) => JSON.stringify(object, null, space).split('\n').forEach(s => console.log(s));

서버 코드를 작성할 때 실제로 읽을 수있는 것을 만드는 뱅업 작업을 수행합니다.


0

공식적으로 만들어진 방법은 모르겠지만 문자열로 된 로그를 쉽게 인쇄 하기 위해 객체에 고유 한 json방법추가했습니다console .

자바 스크립트에서 객체 (기본이 아닌 객체)를 관찰하는 것은 양자 역학과 약간 비슷합니다. "측정"한 것은 이미 변경된 실제 상태가 아닐 수도 있습니다.

console.json = console.json || function(argument){
    for(var arg=0; arg < arguments.length; ++arg)
        console.log(  JSON.stringify(arguments[arg], null, 4)  )
}

// use example
console.json(   [1,'a', null, {a:1}], {a:[1,2]}    )

여러 개의 문자열 화 된 버전의 Object를보기 위해 필요합니다. 그대로 (raw Object) 인쇄하면 프로그램의 진행에 따라 변경되고 객체의 상태를 반영하지 않는 "라이브"버전의 객체가 인쇄됩니다. 예를 들어 기록 된 시점에서

var foo = {a:1, b:[1,2,3]}

// lets peek under the hood
console.log(foo) 

// program keeps doing things which affect the observed object
foo.a = 2
foo.b = null
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.