SyntaxError: Unexpected token in JSON at position 1

Posted

技术标签:

【中文标题】SyntaxError: Unexpected token in JSON at position 1【英文标题】:SyntaxError: Unexpected token in JSON at position 1SyntaxError: Unexpected token in JSON at position 1 【发布时间】:2019-09-20 18:54:55 【问题描述】:

我正在尝试获取包含没有密钥的内部对象的 JSON 请求。但我在位置 1 处得到了 Unexpected token

示例 JSON 如下所示。

“empid”:“001”, “学术类型”:“学士”, “学历”:“BE”, “学术专业”:“计算机科学” , "empid": "002", "academictype": "硕士", “学历”:“MBA”, “学术专业”:“人力资源”

我试过下面的代码

createEmployeeAcademics(req, res, next) 

        let body = '';
        var fbResponse = [];
        req.on('data', function (chunk) 
            console.log(chunk);
            body += chunk;
            console.log(body);
        );

        req.on('end', function () 
            fbResponse.length = 0;

            var arrayValues = JSON.parse(body);

            for (var i = 0; i < arrayValues.length; i++) 

                fbResponse.push(arrayValues[i]);
            
        );
    

我遇到错误

SyntaxError: Unexpected token in JSON at position 1 在 JSON.parse() 处

【问题讨论】:

JSON "是名称/值对的集合",所以你的 JSON 无效,这就是它不解析的原因 @George — 该网站已过时。您给出的描述对于 JSON 中的对象是正确的,这就是我们在这里所拥有的,但对于一般的 JSON 则不正确。 @Quentin 没意识到,你能推荐一个最新的吗?尽管如此,它仍然是了解您不知道的 JSON 是什么的良好基础。 当前规范为tools.ietf.org/html/rfc7159 【参考方案1】:

您的示例 JSON 无效。您可以使用json lint 来验证您的 json 对象。

【讨论】:

【参考方案2】:

这是无效的 Java 脚本对象或列表,并且已被解析。尝试制作列表然后只循环

喜欢

[  "empid" : "001", "academictype": "Bachelor", "academicdegree": "BE", "academicSpecialization": "Computer Science" ,  "empid": "002", "academictype": "Masters", "academicdegree": "MBA", "academicSpecialization": "Human Resources"  ] 

【讨论】:

【参考方案3】:

您显示的示例 JSON 不是有效的 JSON。如果这是您的服务器提供数据的方式,那么服务器提供的 JSON 格式错误。

您可能必须修复服务器以以键值对格式发送数据。

有两种方法可以做到这一点。

1) 将员工数组放入包装对象中:

"employees": [ "empid" : "001", "academictype": "Bachelor", "academicdegree": "BE", "academicSpecialization": "Computer Science" ,  "empid": "002", "academictype": "Masters", "academicdegree": "MBA", "academicSpecialization": "Human Resources" ]

2) 把员工id映射成员工:

 "001": "empid" : "001", "academictype": "Bachelor", "academicdegree": "BE", "academicSpecialization": "Computer Science" , "002": "empid": "002", "academictype": "Masters", "academicdegree": "MBA", "academicSpecialization": "Human Resources"  

根据您选择的格式,客户端代码会略有不同。

【讨论】:

【参考方案4】:

您收到 Unexpected token 错误,因为 JSON.parse(body) 无法解析您提供的 JSON。使用在线tools 美化 JSON 可以帮助更好地调试此问题。对于您的字符串:


    
        "empid": "001",
        "academictype": "Bachelor",
        "academicdegree": "BE",
        "academicSpecialization": "Computer Science"
    , 
        "empid": "002",
        "academictype": "Masters",
        "academicdegree": "MBA",
        "academicSpecialization": "Human Resources"
    

您的 JSON 缺少与 objects 相关的重要属性。

JSON 对象被花括号 包围。

JSON 对象以键/值对的形式编写。

你最外面的花括号后面没有任何键值对,而是直接从另一个对象开始。您可以通过以下任一方式更正 JSON:

1.将外部 JSON 设为数组

[
    
        "empid": "001",
        ...
    , 
        "empid": "002",
        ...
    
]

数组可以直接将对象作为子对象,并且可以顺序访问。

2。为外部对象的子对象添加键:


    "001": 
        "academictype": "Bachelor",
        "academicdegree": "BE",
        "academicSpecialization": "Computer Science"
    ,
    "002": 
        "academictype": "Masters",
        "academicdegree": "MBA",
        "academicSpecialization": "Human Resources"
    

通过这种方式,您可以使用对象的唯一 ID(例如 empid)直接访问对象,尽管遍历它们可能不像数组那么容易。

【讨论】:

以上是关于SyntaxError: Unexpected token in JSON at position 1的主要内容,如果未能解决你的问题,请参考以下文章

求教php运行时出错:Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION 。。。

Import Unexpected identifier + SyntaxError: Unexpected string

js动态加载的a标签的onclick事件参数传递,一直报Uncaught SyntaxError: Invalid or unexpected token

解析错误:语法错误,意外的“未设置”(T_UNSET)

SyntaxError: unexpected EOF while parsing

获取 MongoDB 错误 - SyntaxError: Unexpected token?