2017-06-22 87 views
1
JSON字符串的密钥和值

我特林JSON字符串解析,看起来像这样:通过迭代在JavaScript

{ "a": [{ 
    "b": [ 
     ["c"], 
     [] 
    ], "d": [ 
     [], 
     [] 
    ], "e": [ 
     [], 
     ["f"] 
    ], "g": [ 
     [], 
     ["h", "i"] 
    ] 
}] } 

我使用下面的代码来分析它,并通过按键迭代和价值。但是,除了我期望的键和值之外,我还会得到一些数字作为键,我猜是那些没有键的索引号。我怎样才能修改代码(纯JavaScript),以便我只将“a,b,c,d,e,f,g,h,i”作为键和值,而不再是其他内容?

var jsonData = JSON.parse("name"); 
for (var key in jsonData) { 
    if (jsonData.hasOwnProperty(key)) { 
    // do stuff 
    } 
} 
+0

jsonData [ “一”]会给你的访问下一级 –

+0

预期的结果是什么?当你说你想要这些字母*作为键和值时,你并不清楚你要问什么* – charlietfl

+1

一个数组的“键”是代表列表中值的索引的数字。数组中的所有字母实际上都是“值”,而它们是对象中的“键”。所以,你需要以不同的方式处理它们。 –

回答

1

下面是一个递归解决方案,可以浏览数据结构。当参数是一个数组时,它将迭代并递归遍历每个元素;当它是一个对象时,它会输出每个键并递归通过每个值;否则,它只会输出参数的字符串表示形式。

var data = { "a": [{ 
 
    "b": [ 
 
     ["c"], 
 
     [] 
 
    ], "d": [ 
 
     [], 
 
     [] 
 
    ], "e": [ 
 
     [], 
 
     ["f"] 
 
    ], "g": [ 
 
     [], 
 
     ["h", "i"] 
 
    ] 
 
}] }; 
 

 
function walk(a) { 
 
    if (Array.isArray(a)) { 
 
    a.map(walk); 
 
    } else if (typeof a === 'object') { 
 
    Object.keys(a).forEach(key => { 
 
     console.log(key); 
 
     walk(a[key]); 
 
    }); 
 
    } else { 
 
    console.log(a); 
 
    } 
 
} 
 

 
walk(data);

+0

谢谢,解决了这个问题。我正在尝试这个,除非我先检查'对象',然后'数组',我猜是错误的,因为'对象'是超类。 – media

+0

这也是一个很好的解决方案;为了清晰起见,我使用明确的'Array.isArray()'调用 – tavnab

0

基于示例所示,你可以在JSON字符串使用正则表达式:

let data = { 
 
    "a": [{ 
 
    "b": [ 
 
     ["c"], 
 
     [] 
 
    ], 
 
    "d": [ 
 
     [], 
 
     [] 
 
    ], 
 
    "e": [ 
 
     [], 
 
     ["f"] 
 
    ], 
 
    "g": [ 
 
     [], 
 
     ["h", "i"] 
 
    ] 
 
    }] 
 
}; 
 

 
let res = JSON.stringify(data).match(/\w+/g); 
 
console.log(res.join())

+0

这是'*厨师手指亲吻*'聪明! – tavnab