JSONから文字列への変数ダンプ


82

受信したJSONオブジェクトをjQuery getJSON文字列変数ダンプに変換するクイック関数はありますか(トレース/デバッグの目的で)?


5
愚かな質問-なぜこれがスパムとしてフラグ付けされたのですか?
ina 2012年

1
同じ理由で私の質問は反対票を投じます、時々ユーザーは彼らのクリックで不正確です!
Toni Leigh

回答:


121

はい、JSON.stringify発見することができ、ここでそれはだ、付属のFirefox 3.5.4にし、上に。

JSONストリンフィファイアは反対方向に進み、JavaScriptデータ構造をJSONテキストに変換します。JSONは循環データ構造をサポートしていないため、JSON文字列化子に循環構造を与えないように注意してください。 https://web.archive.org/web/20100611210643/http://www.json.org/js.html

var myJSONText = JSON.stringify(myObject, replacer);

1
Chromeにも含まれていますが、そのjson.orgリンクに(巨大な)404があります
Dean Rather

1
これだけでデータをログに記録したい場合:console.log(JSON.stringify(data、null)); 置換関数が必要ない場合はnullを渡します。
elliotrock 2014

29

console.log()FirebugまたはChromeで使用すると、次のように、ここで適切なオブジェクトビューを取得できます。

$.getJSON('my.json', function(data) {
  console.log(data);
});

文字列を表示したいだけの場合は、ChromeリソースビューまたはFirebugネットビューを見て、サーバーからの実際の文字列応答を確認してください(変換する必要はありません...この方法で受信しました)。

その文字列を取り出して分解して見やすくしたい場合は、ここに優れたツールがあります:http//json.parser.online.fr/


エラーハンドラーを追加すると便利です。そうしないgetJSONと、サイレントに失敗し、機能しない理由を理解するのに苦労します:add .fail(function(jqxhr, status, error) { alert(status + ", " + error);})
Skippy le Grand Gourou

13

私は個人的にjqueryダンププラグインをたくさん使ってオブジェクトをダンプします。これはphpのprint_r()関数に少し似ています。基本的な使用法:

var obj = {
            hubba: "Some string...",
            bubba: 12.5,
            dubba: ["One", "Two", "Three"]
        }
$("#dump").append($.dump(obj));
/* will return:
Object { 
     hubba: "Some string..."
     bubba: 12.5
     dubba: Array ( 
          0 => "One"
          1 => "Two"
          2 => "Three"
     )
}
*/

その非常に人間が読める形式です。色が素敵なので、jsonの作成/解析/読み取りにはこのサイトhttp://json.parser.online.fr/もお勧めします。


1
これは本当に素晴らしいですが、さらに別のプラグインをインストールする必要があります(そしてデバッグのためだけに)
2010

ええ、私は知っています...しかし、私が答えを探しているとき、私の問題は問題に関連しているので、私はしばしば答えの中で何か役に立つものを見つけます。単純な問題がある場合、このプラグインは確かに少しやり過ぎかもしれません:P
Ties

4

これが私が使用するコードです。あなたはそれをあなたのニーズに適応させることができるはずです。

function process_test_json() {
  var jsonDataArr = { "Errors":[],"Success":true,"Data":{"step0":{"collectionNameStr":"dei_ideas_org_Private","url_root":"http:\/\/192.168.1.128:8500\/dei-ideas_org\/","collectionPathStr":"C:\\ColdFusion8\\wwwroot\\dei-ideas_org\\wwwrootchapter0-2\\verity_collections\\","writeVerityLastFileNameStr":"C:\\ColdFusion8\\wwwroot\\dei-ideas_org\\wwwroot\\chapter0-2\\VerityLastFileName.txt","doneFlag":false,"state_dbrec":{},"errorMsgStr":"","fileroot":"C:\\ColdFusion8\\wwwroot\\dei-ideas_org\\wwwroot"}}};

  var htmlStr= "<h3 class='recurse_title'>[jsonDataArr] struct is</h3> " + recurse( jsonDataArr );
  alert( htmlStr );
  $( document.createElement('div') ).attr( "class", "main_div").html( htmlStr ).appendTo('div#out');
  $("div#outAsHtml").text( $("div#out").html() ); 
}
function recurse( data ) {
  var htmlRetStr = "<ul class='recurseObj' >"; 
  for (var key in data) {
        if (typeof(data[key])== 'object' && data[key] != null) {
            htmlRetStr += "<li class='keyObj' ><strong>" + key + ":</strong><ul class='recurseSubObj' >";
            htmlRetStr += recurse( data[key] );
            htmlRetStr += '</ul  ></li   >';
        } else {
            htmlRetStr += ("<li class='keyStr' ><strong>" + key + ': </strong>&quot;' + data[key] + '&quot;</li  >' );
        }
  };
  htmlRetStr += '</ul >';    
  return( htmlRetStr );
}

</script>
</head><body>
<button onclick="process_test_json()" >Run process_test_json()</button>
<div id="out"></div>
<div id="outAsHtml"></div>
</body>

2

これに沿って何か?

function dump(x, indent) {
    var indent = indent || '';
    var s = '';
    if (Array.isArray(x)) {
        s += '[';
        for (var i=0; i<x.length; i++) {
            s += dump(x[i], indent)
            if (i < x.length-1) s += ', ';
        }
        s +=']';
    } else if (x === null) {
      s = 'NULL';
    } else switch(typeof x) {
        case 'undefined':
            s += 'UNDEFINED';
            break;
        case 'object':
            s += "{ ";
            var first = true;
            for (var p in x) {
                if (!first) s += indent + '  ';
                s += p + ': ';
                s += dump(x[p], indent + '  ');
                s += "\n"
                first = false;
            }
            s += '}';
            break;
        case 'boolean':
            s += (x) ? 'TRUE' : 'FALSE';
            break;
        case 'number':
            s += x;
            break;
        case 'string':
            s += '"' + x + '"';
            break;
        case 'function':
            s += '<FUNCTION>';
            break;
        default:
            s += x;
            break;
    }
    return s;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.