2012-03-27 98 views
1

考虑以下嵌套JSON:JQuery的JSON-内-JSON解析

{ 
    "state": [ 
    "Tennessee" 
    ], 
    "more_data": [ 
    { 
     "letters": { 
     "last": "e", 
     "first": "T" 
     } 
    } 
    ] 
} 

我想打印在JavaScript中JSON以平坦的方式,即,root_key =值:

var my_json_str = "{\"state\":[\"Tennessee\"],\"more_data\":[{\"letters\":{\"first\":\"T\",\"last\":\"e\"}}]}"; 
    console.log(my_json_str); 
    my_json = jQuery.parseJSON(my_json_str); 
    for (var key in my_json) { 
     console.log(key,":",my_json[key]); 
    } 

但我得到(萤火虫控制台):

state : ["Tennessee"] 
more_data : [Object { letters={...}}] 

代替所需的:

state:["Tennessee"] 
more_data:[{"letters":{"first":"T","last":"e"}}] 

我该如何解决这个问题?

解决方案 - 以下答案:

http://jsfiddle.net/wrAUB/

var jsonStr = "{\"state\":[\"Tennessee\"],\"more_data\":[{\"letters\":{\"first\":\"T\",\"last\":\"e\"}}]}"; 

var jsonObj = JSON.parse(jsonStr); 
for (key in jsonObj) { 
    console.log(key+':'+JSON.stringify(jsonObj[key])); 
} 
​ 

其中给出:

state:"Tennessee" 
more_data:{"letters":{"first":"T","last":"e"}} 
+3

**你不”不必修理任何东西,没有错误**(呃,除非你真的想以不同的方式打印它,但是为什么?)。这就是Firebug显示嵌套对象的方式。您可以按照预期使用数据。顺便说一句,你没有JSON内的JSON。你只需要JSON(JSON中的JSON就像'{“foo”:“{\”bar \“:42}”}',即包含JSON的字符串)。 – 2012-03-27 15:17:17

+0

这是一个打印问题,而不是解析问题。 – 2012-03-27 15:17:18

+0

让我想起以前的电视购物节目......:“对不起,田纳西州。” – lance 2012-03-27 15:17:49

回答

1

听起来像是你将要调用JSON.stringify对键的值值对。

+0

+1很好,这就是我一直在寻找的东西。 – 2012-03-27 15:30:45

4

您可以使用JSON.stringify把你遍历对象转化成JSON字符串:

var jsonStr = "{\"state\":[\"Tennessee\"],\"more_data\":[{\"letters\":{\"first\":\"T\",\"last\":\"e\"}}]}"; 

​var jsonObj = JSON.parse(jsonStr); 
for (key in jsonObj) { 
    console.log(key+':'+JSON.stringify(jsonObj[key])); 
} 

看到它在行动上的jsfiddle:http://jsfiddle.net/hEvFr/

+0

+1对于jsFiddle!它岩石。 – 2012-03-27 15:30:22