阅读和解析"bad"json

Reading and parsing "bad" json

本文关键字:quot bad json 和解      更新时间:2023-09-26

我有以下格式的数据

{
    "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错误。

那么问题是如何读取这个使得数据是可访问/可迭代的?

数据格式没有问题(在您编辑之后),但是您试图使用不存在的属性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"等任何其他顺序获得它们。不同的浏览器会以不同的顺序返回。

当JQuery调用回调时,data参数是解析JSON结果的对象。它没有items属性。我不知道你想做什么,但你可以这样做:

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

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 />");
    });
});

我相信您对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的一些描述,以及如何获得Javascript对象的所有属性值(不知道键)?如果其他答案不太适合您的情况,