将JSON转换为字符串变量转储

82

是否有一种快速的方法可以将通过 jQuery getJSON 接收到的 JSON 对象转换为字符串变量转储(用于跟踪/调试目的)?


5
这个问题有点儿蠢 - 为什么这被标记为垃圾邮件了? - ina
1
由于同样的原因,我的问题受到了负评,有时用户的点击也不准确! - Toni Leigh
5个回答

121

1
它也包含在Chrome中,但你点击json.org的链接时出现了(巨大的)404错误。 - Dean Rather
1
如果你只是想记录数据,那么可以这样做: console.log(JSON.stringify(data, null)); 如果不需要替换函数,则传递null! - elliotrock

30
你可以在Firebug或Chrome中使用console.log()来获取一个良好的对象视图,像这样:
$.getJSON('my.json', function(data) {
  console.log(data);
});

如果你只是想查看这个字符串,可以查看谷歌浏览器的资源视图(Resource view)或者Firebug的网络视图(Net view)来查看服务器实际响应的字符串(无需转换...你已经以这种方式接收到它了)。

如果您想将该字符串拆分为易于查看的部分,则可以使用此工具:http://json.parser.online.fr/


添加错误处理程序非常有用,否则 getJSON 将会默默失败,你将很难理解为什么它不起作用:添加 .fail(function(jqxhr, status, error) { alert(status + ", " + error);}) - Skippy le Grand Gourou

13

我个人经常使用jQuery dump插件来输出对象,它有点类似于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/来创建/解析/读取JSON,因为它有漂亮的颜色。


1
这真的很棒,但它需要安装另一个插件(仅用于调试)。 - ina
是的,我知道...但是当我在寻找答案时,我经常会在答案中找到一些有用的东西,因为我的问题与该问题相关。如果你只是有一个简单的问题,这个插件可能确实有点过度了: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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接