2013-07-03 46 views
-1

我有一个像下面这样的JSON。 我怎样才能找到控制台空气的长度,找到一个JSON对象的长度

console.log (block.number.path[i].air.length); 

{ "block": [ 
    { "number": "36", 
     "path": [ 
      { "air": "[{\"name\":\"0\"},{\"name\":\"1\"},{\"name\":\"2\"}]" }, 
      { "water": "[{\"name\":\"3\"},{\"name\":\"4\"},{\"name\":\"5\"}]" }, 
      { "sand": "[{\"name\":\"6\"},{\"username\":\"7\"},{\"name\":\"8\"}]" } 
     ] 
    } 
    ] 
} 
+1

'air'是包含JSON字符串。您首先解析JSON以将其转换为数组。另外,[没有像“JSON对象”](http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/)。而“air”的“路径”实际上是:'obj.block [0] .path [i] .air'。如果我是你,我会修复JSON以拥有合适的结构。 –

+0

就像你一样? air的值是一个字符串,而不是一个数组。 –

+0

为什么要投票?似乎stackoverflow是只为经验,小问题的人会downvoted .. :( – usercode

回答

4

air本身包含一个JSON编码数组,你必须先解码:

// your obj in here 
var obj = { "..." : "..." }; 

// grab the respective length of the "air" attribute 
var air = JSON.parse(obj.block[0].path[0].air); 
console.log(air.length); 

http://jsfiddle.net/pLAny/

+0

至少从提供的代码'块'是一个数组,包含一个对象,所以它需要'块[0]'像Ollie提到的在他的回答中。 –

+0

@ t.niese在Felix Kling对这个问题本身的评论之后,已经纠正了这个问题:-) – Sirko

+1

@usercode适合我。看到这[小提琴](http://jsfiddle.net/pLAny/)。 – Sirko

2

可以解决这个像这样:

var length = JSON.parse(block.number.path[i].air).length; 
console.log(length); 
0

块是一个数组,所以你必须访问该元件第一次:

a.block[0].path[0].air.length 

其中a是在要保持的数据的变量。

1

它看起来像一些JSON格式不正确。 “空气”,“水”和“沙”都是JSON数组......但解析成字符串。如果您是生成JSON的人,请仔细研究一下,因为这看起来不正确。正如其他答案指出的那样,只要您确定您的目标浏览器具有该界面(大多数现代界面),它仍然可以在Javascript中使用JSON.parse()解决。

对于任何JSON数组(任何使用[]括号声明的任何东西),您可以检查其.length属性。

1

鉴于json是包含您的JSON的变量,你可以这样做:

json["block"][0]["path"][0]["air"].length