【问题标题】: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 是什么的良好基础。

标签: javascript arrays node.js json


【解决方案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)直接访问对象,尽管遍历它们可能不像数组那么容易。

        【讨论】:

          猜你喜欢
          • 2016-11-03
          • 2019-11-17
          • 2020-10-23
          • 1970-01-01
          • 2022-01-22
          • 2021-09-30
          • 2017-12-15
          • 2017-01-17
          • 1970-01-01
          相关资源
          最近更新 更多