2016-11-08 45 views
0

我试图解析json对象以获取连接到变量的键和值。 从给定的JSON我所需的输出是:JSON:javascript中的键值串联

"/" - 7.84 GiB; "/opt" - 4.86 GiB; "/usr" - 4.80 GiB 

使用我的片段,我可以得到的对象,但在努力获得所需格式的名称和值。请协助。

for (i = 0; i < obj.length; i++) 
{ 
if (obj[i].name === 'mountpoints') 
{ 
js_mountpoints = obj[i].value; 
break; 
} 
js_mountpoints = 'NA'; 
} 

我的JSON输入:

[{ 
    "name" : "pe_build", 
    "value" : "2016.2.1" 
}, 
{ 
    "name" : "kernel", 
    "value" : "Linux" 
}, { 
    "name" : "blockdevices", 
    "value" : "sda,sdb,sr0" 
}, 
{ 
    "name" : "mountpoints", 
    "value" : { 
     "\/boot\/efi" : { 
      "size_bytes" : 261861376, 
      "size" : "249.73 MiB", 
      "capacity" : "0%" 
     }, 
     "\/opt" : { 
      "size_bytes" : 2086666240, 
      "size" : "1.94 GiB", 
      "capacity" : "1.64%" 
     }, 
     "\/boot" : { 
      "size_bytes" : 258650112, 
      "size" : "246.67 MiB", 
      "capacity" : "74.28%" 
     }, 
     "\/var" : { 
      "size_bytes" : 10475274240, 
      "size" : "9.76 GiB", 
      "filesystem" : "xfs", 
      "capacity" : "4.01%" 
     } 
    } 
    }, { 
    "name" : "uptime_seconds", 
    "value" : 244181 
}, { 
"name" : "memoryfree", 
"value" : "6.66 GiB" 
}, { 
"name" : "memoryfree_mb", 
"value" : 6816.91796875 
} 
] 
+0

您的循环将遍历的JSON外值。你需要在数据对象内部进行另一次迭代。同样,一旦你到达期望的键,你将需要从该对象拉**大小**。 –

+3

如果您可以发布有效的JSON – adeneo

+0

@ adeneo,那会非常好,谢谢您的回复。我更新了JSON, – Jakk

回答

1
finalStr = '' 
Object.keys(obj).forEach(function(key) { 
    if (obj[key].name === 'mountpoints') { // only get sizes for mountpoints 
    var value = obj[key].value; 
    Object.keys(value).forEach(function(name) { // add all sizes to string 
     finalStr += '"' + name + '" - ' + value[name].size + ';'; 
    }); //update 
    } 
}); //update 

if (finalStr.length > 0) { // at least one entry was added 
    finalStr.slice(0, -1); 
} 
+0

它工作..谢谢你:) – Jakk