2014-12-10 30 views
0

Jsonlint顯示,這JSON對象是有效的:JSON解析與多個數據

[{"obj":{"markers":"[{\"k\":47.040182144806664,\"B\":0.52734375},{\"k\":50.90303283111257,\"B\":10.37109375},{\"k\":52.53627304145945,\"B\":-1.7578125},{\"k\":41.77131167976406,\"B\":-6.591796875}]","path":"[[47.040182144806664,0.52734375],[50.90303283111257,10.37109375],[52.53627304145945,-1.7578125],[41.77131167976406,-6.591796875]]"}}] 

我試圖訪問標記與K,B和路徑元素,但它總是設置爲undefined。這裏是我的代碼:

try { 

     var jsonData = JSON.parse(myJson); 
     console.log(jsonData.obj[0].markers[0].k); 
    } 
catch (e) { 
      console.error("Parsing error:", e); 
      } 

有人能告訴我如何正確訪問我的JSON對象的元素?謝謝您的幫助。

+0

'obj'是一個對象,而不是一個數組 – chazsolo 2014-12-11 00:02:26

+0

@chazsolo沒有,obj是隻是一個索引我在我的MySQL查詢中使用的數組像這樣:$ rows [] = array('obj'=> $ r); echo json_encode($ rows);它可以是'Bob'... – 2014-12-11 00:04:02

+0

它是因爲標記對象是一個字符串而不是數組所以「markers」的值:「value here in string」 – 2014-12-11 00:07:07

回答

2

一定有什麼出了錯在創建這個字符串。是的,它是有效的JSON,但它的格式與您想象的不同,因爲您會轉義控制字符,如"[]

試試這個字符串,而不是:

[ 
    { 
     "obj":{ 
     "markers":[ 
      { 
       "k":47.040182144806664, 
       "B":0.52734375 
      }, 
      { 
       "k":50.90303283111257, 
       "B":10.37109375 
      }, 
      { 
       "k":52.53627304145945, 
       "B":-1.7578125 
      }, 
      { 
       "k":41.77131167976406, 
       "B":-6.591796875 
      } 
     ], 
     "path":[ 
      [ 
       47.040182144806664, 
       0.52734375 
      ], 
      [ 
       50.90303283111257, 
       10.37109375 
      ], 
      [ 
       52.53627304145945, 
       -1.7578125 
      ], 
      [ 
       41.77131167976406, 
       -6.591796875 
      ] 
     ] 
     } 
    } 
] 

,而不是你的字符串:

[ 
    { 
     "obj":{ 
     "markers":"[{\"k\":47.040182144806664,\"B\":0.52734375},{\"k\":50.90303283111257,\"B\":10.37109375},{\"k\":52.53627304145945,\"B\":-1.7578125},{\"k\":41.77131167976406,\"B\":-6.591796875}]", 
     "path":"[[47.040182144806664,0.52734375],[50.90303283111257,10.37109375],[52.53627304145945,-1.7578125],[41.77131167976406,-6.591796875]]" 
     } 
    } 
] 
+0

也許您的JSON描述更加完善,我只是測試它,但仍然未定義,當我嘗試訪問JSON.parse()後的元素。 – 2014-12-11 00:24:01

+1

你是如何獲取價值的?爲了獲得第一個'47.040182144806664',我做了'jsonData [0] .obj.markers [0] .k'。你是否也這樣做?這對我來說工作正常... – orange 2014-12-11 00:26:08

+0

對不起,你的版本是正確的,現在更好,謝謝! – 2014-12-11 00:29:54

0

你必須從我可以告訴兩個問題:

一個,是的,它是有效的JSON,但標記和路徑對象值括在字符串引號:

"markers":"[{\"k\":47.040182144806664,\"B\":0.52734375},{\"k\":50.90303283111257,\"B\":10.37109375},{\"k\":52.53627304145945,\"B\":-1.7578125},{\"k\":41.77131167976406,\"B\":-6.591796875}]", 
"path":"[[47.040182144806664,0.52734375],[50.90303283111257,10.37109375],[52.53627304145945,-1.7578125],[41.77131167976406,-6.591796875]]" 

你更想要的是:

"markers":[{"k":47.040182144806664,"B":0.52734375},{"k":50.90303283111257,"B":10.37109375},{"k":52.53627304145945,"B":-1.7578125},{"k":41.77131167976406,"B":-6.591796875}], 

"path":[[47.040182144806664,0.52734375],[50.90303283111257,10.37109375],[52.53627304145945,-1.7578125],[41.77131167976406,-6.591796875]] 

但鑑於上述情況,也無法逃避的鉀,硼對象名稱的標記\ 「K \」 應爲 「K」:

因此,完成編輯JSON應該是這樣的:

[{"obj":{"markers":[{"k":47.040182144806664,"B":0.52734375},{"k":50.90303283111257,"B":10.37109375},{"k":52.53627304145945,"B":-1.7578125},{"k":41.77131167976406,"B":-6.591796875}],"path":[[47.040182144806664,0.52734375],[50.90303283111257,10.37109375],[52.53627304145945,-1.7578125],[41.77131167976406,-6.591796875]]}}] 
+0

你的標記和路徑在你的答案中仍然是雙引號的? – 2014-12-11 00:17:47

+0

是的,這只是對象名稱,但值不是引號 – 2014-12-11 00:18:16