2013-10-25 22 views
-3

是的,有很多線程質疑類似的問題,但我發現很少和很少幫助關於動態鍵和從jsons中提取單個值,每個鍵持有多個值。如何使用jquery動態訪問json中的值

我有一個JSON,其中的鍵是動態的,我需要能夠調用每個單獨的值。

任何想法?

JSON下面的例子:

{"AppliedPrepaidBundle":{"id":["14","15","24","25","26","27","28","29","30","31"],"prepaid_bundle_id":["5","5","5","5","5","5","5","5","5","5"]},"Device":{"id":["77","77","91","91","117","117","117","117","117","124"]}} 

我已經用下面的代碼打左右,但目前只成功地吐出一連串的值,而不是個別的:

 $.each(data, function (key1, value1) { 
      $.each(value1, function (key, value) { 
       $('body').append('<li id="' + key + '">' + key1 +' ' + key +' ' + value + '</li>'); 
      }); 
     }); 

解決了這個:

 json = JSON.parse(data); 
     for (var index in json) { 
      $.each(json[index], function(key,value) { 
       for(var i = 0; i< json[index][key].length; i++){ 
        $('body').append('<li>' + index +' ' + key +' ' + json[index][key][i] + '</li>'); 
       } 
      }); 
     } 
+0

編輯的問題包括一些嘗試的代碼,只是稍微卡住拉個別值。 – xtremetom

+0

你正在創建這些JSON對象嗎?如果是使用匿名JSON對象的數組使其迭代 http://gist.github.com/MeiSign/d2d92beee756f3fe0d54 – MeiSign

+0

我確實可以完全控制json的創建 – xtremetom

回答

0

JSON返回JavaScript中的對象。所以,你可以做這樣的事情:

var json = {"AppliedPrepaidBundle":{"id":["14","15","24","25","26","27","28","29","30","31"],"prepaid_bundle_id":["5","5","5","5","5","5","5","5","5","5"]},"Device":{"id":["77","77","91","91","117","117","117","117","117","124"]}}; 

for (var i=0; i<json.AppliedPrepaidBundle.id.length; i++) { 
    console.log("id"+i+": "+json.AppliedPrepaidBundle.id[i]); 
} 

這打印出ID對象的所有值:14,15,24,25,等

+0

這裏的問題正在使這種動態。生成的json受到用戶選擇的選項的限制,因此密鑰可能會更改。 – xtremetom

+0

@xtremetom然後找出關鍵是什麼(如果有多個?如果沒有?怎麼辦?),並使用方括號表示法作爲'json [key] [i]' –

+0

解決與改編以上利用評論通過Jan – xtremetom

0

從這個例子中,你可以訪問所有元素

var json = {"AppliedPrepaidBundle":{"id":["14","15","24","25","26","27","28","29","30","31"],"prepaid_bundle_id":["5","5","5","5","5","5","5","5","5","5"]},"Device":{"id":["77","77","91","91","117","117","117","117","117","124"]}}; 

for (var i=0; i<json.AppliedPrepaidBundle.id.length; i++) { 
    $('body').append("<li>AppliedPrepaidBundle id"+i+": "+json.AppliedPrepaidBundle.id[i]+'</li>'); 
} 
for (var i=0; i<json.AppliedPrepaidBundle.prepaid_bundle_id.length; i++) { 
    $('body').append("<li>PrepaidBundleid"+i+":"+json.AppliedPrepaidBundle.prepaid_bundle_id[i]+'</li>'); 
} 
for (var i=0; i<json.Device.id.length; i++) { 
    $('body').append("<li>Device id"+i+": "+json.Device.id[i]+'</li>'); 

} 

Here is the fiddle

0

使用JSON.parse創建一個對象。 (見How to parse JSON in JavaScript)。然後通過for (x in yourObject) { ... }循環訪問屬性。

var jsonObject = JSON.parse('your JSON-String'); 
for (property in jsonObject) { 
    // do something with jsonObject[property] 
    console.log(property + ' ' + jsonObject[property]); 
} 
+0

小心與'財產'。可能需要使用'.HasOwnProperty'來過濾掉系統屬性 – jasonscript

0

你可以使用JavaScript基本功能工作: http://jsfiddle.net/taUng/

var data = {"AppliedPrepaidBundle":{"id":["14","15","24","25","26","27","28","29","30","31"],"prepaid_bundle_id":["5","5","5","5","5","5","5","5","5","5"]},"Device":{"id":["77","77","91","91","117","117","117","117","117","124"]}}; 
for (var dataIndex in data) { 
    console.log(dataIndex, data[dataIndex]); 
    var subData = data[dataIndex]; 
    for (var subDataIndex in subData) { 
     console.log(subDataIndex, subData[subDataIndex]); 
    } 
} 

等等......

當你的一個合適的JavaScript,你也可以用遞歸工作,穿上」不要重複自己。 (http://en.wikipedia.org/wiki/Dont_repeat_yourself