繁体   English   中英

SyntaxError:意外令牌{位于JSON中的位置1

[英]SyntaxError: Unexpected token { in JSON at position 1

我正在尝试获取具有内部对象且没有密钥的JSON请求。 但是我在位置1收到了意外令牌{

下面给出了示例JSON。

{{“” empid“:” 001“,” academictype“:”学士“,” academicdegree“:” BE“,” academicSpecialization“:”计算机科学“},{” empid“:” 002“,” academictype“:”硕士”,“学术学位”:“ MBA”,“ academicSpecialization”:“人力资源”}}

我试过下面的代码

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

我低于错误

语法错误:意外令牌{在JSON.parse()位置1的JSON中

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

喜欢

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

您收到Unexpected token错误,因为JSON.parse(body)无法解析您提供的JSON。 使用在线工具美化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 )直接访问对象,尽管遍历对象可能不像数组那么容易。

您的示例JSON无效。 您可以使用json lint来验证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" } }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM