2014-07-21 40 views
0

我有數據格式讀取和解析「壞」的JSON

{ 
    "id1":["name1",10,20], 
    "id2":["name2",12,20], 
    "id3":["name3",14,21] 
} 

,並正在與

var dat; 

$(document).ready(function() { 
    $.getJSON('data.json', function(data) { 
     dat = data.items; 
     console.log(dat); 
    }); 
}); 

這被證明是有問題的讀入適當的,因爲據我所知,閱讀它(請澄清如果我錯了),這是一個糟糕的JSON格式,因爲它缺少字段名稱。此外':'似乎創建了一個類似字典類的東西,我不確定這是否會阻止產生的對象被迭代。如果我在控制檯中調用它(例如dat[0]),我會得到「undefined」,但這裏可能還有一個額外的jquery錯誤。

所以問題是如何讀取這個數據是可訪問/可迭代的?提前致謝。

+0

它不缺少字段名稱;問題是其中一個字段名稱是重複的。另外,你指的是什麼''。''? –

+0

請原諒我這是一個錯字,數據有獨特的名字。已更正 – geotheory

+0

好的。那麼究竟是什麼問題呢?它爲我解析得很好。請注意,JSON結構中沒有「items」屬性。這可能是你的代碼的問題嗎? –

回答

2

數據格式沒有問題(編輯後),但您嘗試使用不存在的屬性items

你可以通過在對象中的項環,並從每個陣列訪問值:

$.each(data, function(key, value){ 
    // key contains "id1", "id2", and "id3" for the iterations 
    // value is the array 
    var name = value[0]; // contains "name1", "name2", "name3" 
    var num1 = value[1]; // contains 10, 12, 14 
    var num2 = value[2]; // contains 20, 20, 21 
}); 

注:項目中的對象的順序是不確定的,所以你可以在訂單"id1", "id2", "id3"讓他們或者像"id2", "id3", "id1"之類的任何其他命令。不同的瀏覽器將以不同的順序返回它們。

+0

這是現貨,謝謝。稍微簡化版本,使用可用的數據對象輸出: 'dat = []; $ .each(data,function(key,value)dat [dat.length] = {name:value [0],num1:value [1],num2:value [2]});' – geotheory

+1

@geotheory:Even使用map方法更簡化:var dat = $ .map(data,function(value,key){return {name:value [0],num1:value [1],num2:value [2]}; });'。 :) – Guffa

+0

touchémon ami :) – geotheory

0

當JQuery調用回調函數時,參數data是解析JSON時得到的對象。它沒有items屬性。我不確定你想做什麼,但你可以這樣做:

$(document).ready(function() { 
    $.getJSON('data.json', function(data) { 
     $.each(data, function(key, val) { 
      console.log("Key: " + key + "; value: " + val); 
     }); 
    }); 
}); 
0

我相信你對JSON遵循的數據結構感到困惑。

JSON確實遵循與詞典類似的結構。在JavaScript中,沒有.items()方法(我認爲這就是您的意思data.items),就像在Python等其他語言中一樣。當您編寫data.property時,它就相當於data['property'],就像獲取字典數據結構中某個鍵的值一樣。

關於如何解析的對象,看看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Enumerating_all_properties_of_an_object

您可以在這裏找到JSON解析以及How to get all properties values of a Javascript Object (without knowing the keys)?的一些描述,如果其他的答案對你的情況做不大的工作。

+0

_「JSON,或者說,JavaScript Objects_」呃?沒有.. –

+0

我的意思是對象文字,但是不管怎樣,兩者之間有一些細微的差別 - 我編輯了這個,因爲這可能會讓人困惑,謝謝! – agilgur5

+0

是的,JSON和對象文字符號是相似的,但不相同。當然,JSON和對象文字本身基本上是不相關的,JSON和Javascript對象完全不相關。 –

0

http://jsfiddle.net/EHret/

幾種不同的方式來達到數據。

var data = { 
    "id1":["name1",10,20], 
    "id2":["name2",12,20], 
    "id3":["name3",14,21] 
}; 

$("div").append(data["id1"] + "<br />"); 
$("div").append(data["id2"][0] + "<br />"); 
$("div").append(data["id2"][1] + "<br />"); 
$("div").append(data["id2"][2] + "<br />"); 

$.each(data, function(index, val){ 
    $("div").append(index + " : " + val + "<br />"); 
    $.each(val, function(key, value){ 
     $("div").append(key + " : " + value + "<br />"); 
    }); 
}); 
+0

謝謝,但是這種方法需要事先了解id值。 – geotheory

+0

你是否自己檢查底部的循環?這些每個循環都沒有先驗知識。它根據數據將它分成每個值。 –

+0

我承認沒有。感謝澄清 – geotheory