未捕获的语法错误:意外的标记o:简单的JSON解析器不工作

Uncaught SyntaxError: Unexpected token o : Simple JSON parser not working

本文关键字:JSON 简单 工作 语法 错误 意外      更新时间:2023-09-26

有人能看到这个简单的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);

您不需要进行任何解析!您的数据已经在JavaScript对象中,而不是JSON字符串

这通常是一个混淆-JSON是一个字符串,表示数据。JavaScript对象是JS存储的实际数据。

您的json不是JSON,它是对=右侧的对象初始化程序定义的对象的引用。看不到JSON。JSON是一种文本,用于数据交换的非源代码表示法。没有理由分析你所拥有的;JavaScript引擎已经解析了它:http://jsfiddle.net/m36n6zoj/2/

您得到错误的原因JSON.parse将其第一个参数强制转换为字符串(因为它用于解析JSON,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);

我认为您有错误的json格式,您需要添加像这样的双引号键

        "type": "cow"

这不是一个json对象,它是您提供的javascript对象,因此它不会被解析,如果您希望它是json,请使用字符串函数而不是