Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “阅读与分析”;“坏的”;json_Javascript_Jquery_Json - Fatal编程技术网

Javascript “阅读与分析”;“坏的”;json

Javascript “阅读与分析”;“坏的”;json,javascript,jquery,json,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); }); });

我有格式的数据

{
    "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格式,因为它缺少字段名。此外,“:”似乎创建了类似于dictionary类的东西,我不确定这是否会阻止生成的对象成为iterable。如果我在控制台中调用它(例如,
dat[0]
),我会得到“undefined”,但这里可能还有一个额外的jquery错误


所以问题是如何读入这些数据,以便数据可以访问/读取?提前感谢。

数据格式没有问题(编辑后),但您正在尝试使用不存在的属性

可以循环对象中的项,并访问每个数组中的值:

$.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调用回调时,
数据
参数是解析JSON的结果对象。它没有
items
属性。我不确定你想做什么,但你可以这样做:

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

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

JSON确实遵循与字典类似的结构。但是在JavaScript中,没有像Python等其他语言中那样的
.items()
方法(我假设这就是您对
data.items
的意思)。当您编写
data.property
时,它相当于
data['property']
,就像在字典数据结构中获取键的值一样

关于如何解析对象,请看

如果其他答案不适合您的情况,您也可以在这里找到一些解析JSON的说明。

获取数据的方法很少

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 />");
    });
});
var数据={
“id1”:[“名称1”,10,20],
“id2”:[“名称2”,12,20],
“id3”:[“名称3”,14,21]
};
$(“div”)。追加(数据[“id1”]+“
”; $(“div”)。追加(数据[“id2”][0]+“
”; $(“div”)。追加(数据[“id2”][1]+“
”; $(“div”)。追加(数据[“id2”][2]+“
”; $.each(数据、函数(索引、val){ $(“div”)。追加(索引+”:“+val+”
); $。每个(val、函数(键、值){ $(“div”)。追加(键+”:“+value+”
); }); });
它不缺少字段名;问题是其中一个字段名重复。还有,你指的是什么?
?请原谅,这是一个输入错误,数据有唯一的名称。我已经改正了。那么到底是什么问题呢?这对我来说很好。请注意,JSON结构中没有
“items”
属性。这可能是代码的问题吗?如何访问结果对象中的数据。调用
dat[0]
将给出“未定义”。
dat.length
也没有给出任何信息,等等。如果有疑问,请在jsonlint.com中验证您的json…传递很好,我是指对象文字,但不管怎样,两者之间确实存在一些细微的差异--我将其编辑掉,因为这可能会让人困惑,谢谢!是的,JSON和对象文字表示法相似,但不相同。当然,JSON和对象文本本身基本上是不相关的,JSON和Javascript对象是完全不相关的。谢谢,但是这种方法需要事先知道id值。你自己检查底部的循环了吗?在这些循环中没有先验知识。它根据数据将其分解为每个值的一部分。我承认不是。谢谢你的澄清。这很好,谢谢。略微简化的版本,具有可用的数据对象输出:
dat=[];$。每个(数据、函数(键、值)数据[dat.length]={name:value[0],num1:value[1],num2:value[2]})
@geotheory:使用
map
方法更加精简:
var dat=$.map(数据、函数(值、键){return{name:value[0],num1:value[1],num2:value[2]};}):)