JSON字符串循环和打印

问题描述:

我有一个JSON字符串以这种格式JSON字符串循环和打印

{"prey":["{\"distance\": 8.686924173343307, \"signal\": \"-59\", \"frequency\": 2447, \"mac\": \"00:00:00:00:00:00\", \"ip\": \"192.168.43.27\"}"]} 

我解析使用此JSON var jsonSpy = JSON.parse(userList);

什么,我试图做它使用的代码获得距离出它波纹管我有两个变种都做同样的事情。我可以得到它输出距离,信号,频率,MAC和IP的每个单独的数组,但不能获得如下代码所示的单个数据位。我知道循环和每个做同样的事情json打印出一个字符串,但是当我试图获得距离,我得到一个未定义的消息不是一个错误,它只是返回undefined。

for(var i = 0; i < jsonSpy.prey.length; i++) 
{ 
    console.log(jsonSpy.prey[i]); 
    console.log(jsonSpy.prey[i].distance); 
    ctx.fillRect(jsonSpy.prey[i].distance, 300, 20, 20); 
} 

$.each(jsonSpy.prey, function(i, item) { 
    console.log(jsonSpy.prey[i]); 
    console.log(jsonSpy.prey[i].distance); 
    ctx.fillRect(jsonSpy.prey[i].distance, 300, 20, 20); 
}); 
+0

所以你想要的距离值? – greenhoorn

+0

如果是这种格式,则需要使用'JSON.parse(jsonSpy.prey [i])'读取数据。 – Phylogenesis

+0

@ user4341206 http://jsonlint.com/不同意并表示它是有效的 – bobthemac

jsonSpy.prey[0]中的数据仍然是串行化的。为了在里面使用JSON,你需要再次运行它通过JSON.parse()

for(var i = 0; i < jsonSpy.prey.length; i++) 
{ 
    var innerJSON = JSON.parse(jsonSpy.prey[i]); 

    console.log(jsonSpy.prey[i]); 
    console.log(innerJSON.distance); 
    ctx.fillRect(innerJSON.distance, 300, 20, 20); 
}