javascript - Foreach JSON with random keys
本问题已经有最佳答案,请猛点这里访问。
当我想反序列化JSON时,我现在遇到了这个问题。我不知道怎么用未知的钥匙
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | [ { "84.200.222.4": [ 0.022 ] }, { "84.200.230.82": [ 1.315 ] }, { "80.156.160.161": [ 0.874 ] }, { "72.14.217.108": [ 0.662 ] }, { "108.170.251.193": [ 0.638 ] }, { "216.239.54.61": [ 0.64 ] }, { "172.217.23.131": [ 0.564 ] } ] |
我想怎么办呢
1 2 3 4 5 6 7 8 9 10 11 | 1. 84.200.222.4 - 0.022 2. 84.200.230.82 - 1,315 3. 80.156.160.161 - 0.874 4 72.14.217.108 - 0.662 |
等。。我目前不确定如何循环使用未知的密钥,这是可能的吗?
只需遍历数组,并使用
1 2 3 | arr.forEach(obj => { console.log(Object.keys(obj)[0]); }) |
以下是一种快速处理方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | var array = [{ "84.200.222.4": [0.022] }, { "84.200.230.82": [1.315] }, { "80.156.160.161": [0.874] }, { "72.14.217.108": [0.662] }, { "108.170.251.193": [0.638] }, { "216.239.54.61": [0.64] }, { "172.217.23.131": [0.564] }]; array.forEach((object, index) => { var ip = Object.keys(object).pop(); console.log(`${index + 1}. ${ip} - ${object[ip]}`); }); |
我没有测试这个,但它应该可以工作。
首先,它是一个数组,所以您需要循环遍历它。然后,尽管对象键有所不同,但您可以使用object.keys获取对象的键,或者只在对象上迭代。所以你的代码应该是这样的
1 2 3 4 5 6 7 8 9 10 11 12 | function printValues(arr) { var arrayLength = arr.length; for (var i = 0; i < arrayLength; i++) { let obj = arr[i]; for (var key in obj) { x = obj[key]; alert(x); } } } |
这可以优化到一行,但我尽可能简单地让您理解。
用途:
1 | var parsed = JSON.parse(data); |
这将返回一个javascript对象/数组。
然后做
1 | var result = parsed[0].keys.map(key => { /** do whatever **/}); |