2013-06-04 70 views
0

我正在嘗試創建幾個級別的json,並且我在兩個地方遇到了麻煩。第一,是正確的格式。我也想爲數據集添加一個「level_two」。與jQuery的多級JSON

第二個是解析數據。任何幫助將不勝感激。

謝謝!

JSON: 
{ 
    "math_problems": [ 
     { 
      "level_one": { 
       "addition": { 
        "problem": { 
         "data_set": [ 
          3, 
          2 
         ] 
        }, 
        "problem": { 
         "data_set": [ 
          5, 
          1 
         ] 
        } 
       }, 
       "subtraction": { 
        "problem": { 
         "data_set": [ 
          4, 
          2 
         ] 
        } 
       }, 
       "division": { 
        "problem": { 
         "data_set": [ 
          3, 
          2 
         ] 
        } 
       }, 
       "multiplication": { 
        "problem": { 
         "data_set": [ 
          3, 
          2 
         ] 
        } 
       } 
      } 
     } 
    ] 
} 


jQuery: 

$.getJSON('/data/math.json', function(data) { 

     var the_data = []; 

     $.each(data,function(index,item) { 
      i = index; 
      number_one = item[0]['level_one']['addition']['problem']['data_set'][0]; 
      number_two = item[0]['level_one']['addition']['problem']['data_set'][1]; 

      the_data += number_one + " + " + number_two; 
     }); 

     $('<ul/>', { 
      'class': 'my-new-list', 
      html: the_data + " = " + (number_one + number_two) 
     }).appendTo('body'); 
    }); 

我希望能夠解析數據拉出來說:

level_one>另外>問題1> 3,2

level_two>減法>問題1> 4,3

有沒有想法?

回答

0

JSON被轉換成一個JavaScript對象,所以事實上,你在「加法」上重複鍵「問題」使得第二個「問題」覆蓋第一個。

你應該重新考慮你的JSON結構,也許是這樣的:

"math_problems" : { 
    "level_one": { 
    "addition": { 
     "problems": [ 
     { 
      "data_set": [3,2] 
     }, 
     { 
      "data_set": [5,1] 
     } 
     ] 
    }, 
    "subtraction": ...  
    } 
} 

,或者在情況下的問題,問題的類型和級別是高度動態:

"math_problems" : {  
    "levels": [ 
    { 
     "name" : "Level one", 
     "problems": [ 
     { 
      "type" : "addition", 
      "data_set": [3,2] 
     }, 
     { 
      "type" : "addition", 
      "data_set": [5,1] 
     }, 
     { 
      "type" : "subtraction", 
      "data_set": [2,1] 
     } 
     ] 
    }, 
    { 
     "name" : "Level two", 
     "problems": [ 
     ... 
     ] 
    } 
    ] 
} 
+0

我在第2行收到錯誤:未捕獲的SyntaxError:意外的令牌: –

+0

我不太明白「var object =」的意思,如果您使用jQuery ajax來獲取json,那麼請求的結果已經是javascript對象。您可以在瀏覽器控制檯中檢查JSON,並使用http://jsonlint.com/來驗證您的JSON – cernunnos

+0

感謝您的幫助至今,這是我正在使用的,我仍然不是那裏.. $。 AJAX({ 數據類型: 'JSON', URL: '/data/math.json', 成功:功能(響應){ 警報(response.math_problems.levels.level.problems.dataset [0]); } }); –

1

所以正確的JSON是:

var object = { 
    levelOne: { 
     // etc. 
    }, 
    levelTwo: { 
     // etc. 
    } 
} 

使用JSON.parse()解析它完成,然後遍歷它是這樣的:

object.level_one.prop.prop1; 
object.level_two.otherProp.otherProp2; 
2

的問題是,你有一個散列定義相同的密鑰在同一級別:

"problem": { 
    "data_set": [ 
     3, 
     2 
    ] 
}, 
"problem": { 
    "data_set": [ 
     5, 
     1 
    ] 
} 

這些會相互碰撞並相互覆蓋。重組它是一個數組,你應該很好。