阅读和解析"bad"json
Reading and parsing "bad" 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错误。
那么问题是如何读取这个使得数据是可访问/可迭代的?
数据格式没有问题(在您编辑之后),但是您试图使用不存在的属性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对象的所有属性值(不知道键)?如果其他答案不太适合您的情况,
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- Javascript复选框函数:;缺少:在属性id之后"
- "“;变量未引用正确的对象
- "日期“;AJAX请求返回的类型值未定义
- 得到"TypeError:无法读取属性'filename'未定义的“;调用“npm start
- Soundcloud api"未捕获的类型错误:无法读取属性'uri'“未定义”;
- "工具提示"jQuery插件坏了
- "锻造;React中的表达式
- 图像可以从源<img src=""/>.TEXT可以在没有javascript的情况下从外部
- 如何提取“;href"最近列表项中的属性值
- CKEditor如何允许href="javascript:void(0)"在小部件中
- 插入“;img src"在javascript中