阅读和解析“坏”的json

时间:2014-07-21 17:20:46

标签: javascript jquery 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]),我会得到“未定义”,但是这里可能还有一个jquery错误。

所以问题是如何阅读这个以便数据可访问/可迭代?提前谢谢。

4 个答案:

答案 0 :(得分: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"之类的其他顺序获取它们。不同的浏览器会以不同的顺序返回它们。

答案 1 :(得分:0)

当JQuery调用回调时,data参数是解析JSON产生的对象。它没有items属性。我不确定你要做什么,但你可以这样做:

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

答案 2 :(得分:0)

我相信你对JSON遵循的数据结构感到困惑。

JSON确实遵循与Dictionary类似的结构。但是在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)?

答案 3 :(得分: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 />");
    });
});