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]};})代码>:)