我有一个非常复杂的json对象,我需要按原样编写所有属性和键。我有它的概念就是无法执行。
如果对象具有对象等,则需要继续调用该函数。我碰到了障碍,有些钥匙没有被输出,有些价值被打破了
0:h 1:t 2:t 3:p 4: 5:/ 6:/ etc....
name:Travel
scheme:
label:
我认为我的代码中某处需要更改一些错误。
ObjectValues = function(obj){
for(var j in obj){
if(typeof(obj[j]) == "object"){
for(var k in obj[j]){
ObjectValues(obj[j][k]);
}
} else {
console.log(j + ":" + obj[j]);
}
}
_
{
"title": "Norway Tourism: Wildlife and Nature",
"author": "",
"categories": [
{
"name": "Travel",
"scheme": "",
"label": ""
}
],
"countries": [
],
"content": [
{
"thumbnails": [
{
"audioChannels": 0,
"audioSampleRate": 0,
"bitrate": 0,
"checksums": {
"md5": "7089E4E044069AE7702DEC686"
}
}
]
}
]
}
答案 0 :(得分:7)
ObjectValues = function(v, k){
if (typeof v == "object") {
for (var kp in v) {
if (Object.hasOwnProperty.call(v, kp)) {
ObjectValues(v[kp], k != undefined ? k + "." + kp : kp);
}
}
} else {
console.log(k + ":" + v);
}
};
甚至可以用于非对象的JSON值。它适用于
ObjectValues(JSON.parse("0"));
如果你ObjectValues("http://...")
,它将不会被原文处理,并且不会迭代顶级字符串中的字符。
答案 1 :(得分:2)
使用:
ObjectValues = function(obj) {
var isArray = obj instanceof Array;
for (var j in obj) {
if (obj.hasOwnProperty(j)) {
if (typeof(obj[j]) == "object") {
if(!isArray)
{
console.log(j + ":");
}
ObjectValues(obj[j]);
} else if(!isArray) {
console.log(j + ":" + obj[j]);
}
}
}
}
注意删除的循环。你把它拆分的方式就是丢失k
名字。
您还应该使用hasOwnProperty来避免序列化不需要的密钥。
如果值是一个对象,您仍然希望序列化该键(例如,您不想丢失{foo: {} }
的foo。)
最后,我必须进行数组检查,因为数组是对象,我们确实希望在数组中输出嵌套的键,但我们不希望自己输出数组索引。
jsFiddle的演示。
答案 2 :(得分:0)
不能说这是唯一的问题,但是在国家/地区阵列之后你错过了一个逗号。
此外,对于像“类别”(和其他)这样的细分市场,你确定它需要用方括号括起来吗?在JS术语中,这是一个数组。所以我相信你说你有一个数组,但在这种情况下,该数组的唯一成员是一个对象。
答案 3 :(得分:0)
因为你的问题有一个jquery标记:
我个人使用jquery.dump插件用于此目的。