有人可以看到这个简单的JSON解析器有什么问题吗? (JSFiddle Link)
我在控制台中收到错误说
Uncaught SyntaxError: Unexpected token o
var a = document.getElementById('a');
var json = {
type: "cow",
sound: "moo",
colors: ["black", "white", "brown"],
feed: {
types: ["hay", "grass"],
consistency: "wet"
}
};
var parsed = JSON.parse(json);
//called with every property and it's value
function process(key,value) {
console.log(key + " : " + value);
}
function traverse(o,func) {
for (var i in o) {
func.apply(this,[i,o[i]]);
if (o[i] !== null && typeof(o[i])=="object") {
//going on step down in the object tree!!
traverse(o[i],func);
}
}
}
//that's all... no magic, no bloated framework
traverse(json,process);
答案 0 :(得分:1)
你不需要做任何解析!您的数据已存在于 JavaScript对象中,而不是 JSON字符串。
这通常是一个混乱 - JSON是一个字符串,表示数据。 JavaScript对象是JS存储的实际数据。
答案 1 :(得分:1)
您的json
不是JSON,它是对=
右侧的对象初始化程序定义的对象的引用。看不到JSON。 JSON是用于数据交换的 textual 非源代码表示法。没有理由解析你拥有的东西; JavaScript引擎已经解析它:http://jsfiddle.net/m36n6zoj/2/
原因你得到的错误是JSON.parse
强制它的第一个参数为一个字符串(因为它是用于解析JSON,它是文本的,因此在JavaScript中保存在字符串中码)。如果您使用json
引用的通用对象并将其转换为字符串,则会获得"[object Object]"
。所以你这样做:
JSON.parse("[object Object]")
到JSON解析器,它看起来像数组的开头([
),后跟字母o
。字母o
在JSON中的该位置无效,因此您收到错误。
当然,如果您真的想使用JSON(也许您通常会通过ajax或其他东西加载json
而这只是测试代码),您可以:http://jsfiddle.net/m36n6zoj/3/
var a = document.getElementById('a');
var json =
'{' +
' "type": "cow",' +
' "sound": "moo",' +
' "colors": ["black", "white", "brown"],' +
' "feed": {' +
' "types": ["hay", "grass"],' +
' "consistency": "wet"' +
' }' +
'}';
var parsed = JSON.parse(json);
//called with every property and it's value
function process(key,value) {
console.log(key + " : " + value);
}
function traverse(o,func) {
for (var i in o) {
func.apply(this,[i,o[i]]);
if (o[i] !== null && typeof(o[i])=="object") {
//going on step down in the object tree!!
traverse(o[i],func);
}
}
}
//that's all... no magic, no bloated framework
traverse(parsed,process);
答案 2 :(得分:0)
我认为你有错误的json格式,你需要在这样的双引号中添加键
"type": "cow"
这不是一个json对象,它是一个javascript对象,你提供所以它不会被解析,你想要它是JSON而不是去字符串化函数