首页 > 解决方案 > JSON Parse 错误:获取 json 对象后未终止的字符串

问题描述

我遇到了以下问题:

我正在从我的 nodejs 后端获取一个 json 对象,这是以下 MYSQL 操作的结果

app.get('/get_events/:playgroundId',  cors(), function(req,res){

    var playgroundId = req.params.playgroundId;

    var sql = "SELECT date as date, CONCAT('[',GROUP_CONCAT(JSON_OBJECT('id', event_id,'time', time,'admin_id', admin_id,'playground_id', playground_id,'event_name', event_name,'description', description,'mode', mode,'type', type,'members', members,'waiting', waiting,'invited', invited)),']') AS list FROM xxx.events where playground_id = '"+playgroundId+"' GROUP BY DATE(date) ORDER BY DATE(date)";
    pool.query(sql, function(err, results) {
        if(err) {
            console.log(err)
            return res.send(err)
        } else {
            return res.json({
                data: results
            })
        }
    });
}); 

在客户端(这是一个反应应用程序)我使用以下获取:

fetch(`${global.x}/get_events/${playgroundId}`)
    .then((res) => res.json())
    .then((res) => {
        const data = res.data  
        return data
    
    }).catch((error) => {
      //console.log(error)
    });

整个事情基本上返回一个按日期分组的关于我在数据库中得到的事件的 json 响应。最终数据如下所示:

数组[对象{“日期”:“2021-03-17T14:52:18.000Z”,“列表”:“[{”id”:“cd66d921-8688-11eb-909e-06a351dd0cca”,“模式”:“公共", "时间": "2021-03-16 19:52:18.000000", "类型": "游戏", "邀请": ["ucLYuwevW5f2uTjdCZpVLBay6kq1"], "成员": ["ucLYuwevW5f2uTjdCZpVLBay6kq1"], "等待中" :[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“admin_id”:“ucLYuwevW5f2uTjdCZpVLBay6kq1”,“event_name”:“Ttt”,“描述”:“Vvv”,“playground_id”:“a32bb687-7ae3-11eb-909e-06a351dd0cca”}, id”:“e2ecc0e4-868a-11eb-909e-06a351dd0cca”,“模式”:“公共”,“时间”:“2021-03-16 21:07:06.000000", "type": "Game", "invited": ["ucLYuwevW5f2uTjdCZpVLBay6kq1"], "members": ["ucLYuwevW5f2uTjdCZpVLBay6kq1"], "waiting": ["ucLYuwevW5f2uTjdCZpVLBay6kq1"], "admin_id": "ucLYuwevW5f2uTjdCZpVLBay6kq1" ,“事件名称”:“Tt”,“描述”:“Ggg”,“playground_id”:“a32bb687-7ae3-11eb-909e-06a351dd0cca”},{“id”:“eed0ee4c-8688-11eb-909e-06a351dd0cca” ,“模式”:“公共”,“时间”:“2021-03-16 19:52:18.000000”,“类型”:“游戏”,“邀请”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“成员”:[” ucLYuwevW5f2uTjdCZpVLBay6kq1"], "等待": ["ucLYuwe]", }, ]000000“”,“类型”:“ game”,“邀请”:[uclyuwevw5f2utjdczpvlbay6kq1“],“成员”:[“ uclyuw5f2czpvlbay6kq1”]事件名称:“Tt”,“描述”:“Ggg”,“playground_id”:“a32bb687-7ae3-11eb-909e-06a351dd0cca”},{“id”:“eed0ee4c-8688-11eb-909e-06a351dd0cca”,“模式”:“公共”,“时间”:“2021-03-16 19:52:18.000000”,“类型”:“游戏”,“邀请”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“成员”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1” ], "等待": ["ucLYuwe]", }, ]000000“”,“类型”:“ game”,“邀请”:[uclyuwevw5f2utjdczpvlbay6kq1“],“成员”:[“ uclyuw5f2czpvlbay6kq1”]事件名称:“Tt”,“描述”:“Ggg”,“playground_id”:“a32bb687-7ae3-11eb-909e-06a351dd0cca”},{“id”:“eed0ee4c-8688-11eb-909e-06a351dd0cca”,“模式”:“公共”,“时间”:“2021-03-16 19:52:18.000000”,“类型”:“游戏”,“邀请”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“成员”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1” ], "等待": ["ucLYuwe]", }, ]“类型”:“游戏”,“邀请”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“成员”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“等待”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“admin_id”:“ucLYuwevW6f2uVj” “Tt”,“描述”:“Ggg”,“playground_id”:“a32bb687-7ae3-11eb-909e-06a351dd0cca”},{“id”:“eed0ee4c-8688-11eb-909e-06a351dd0cca”,“模式”: “公开”、“时间”:“2021-03-16 19:52:18.000000”、“类型”:“游戏”、“邀请”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”]、“成员”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”]、“等待": ["ucLYuwe]", }, ]“类型”:“游戏”,“邀请”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“成员”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“等待”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“admin_id”:“ucLYuwevW6f2uVj” “Tt”,“描述”:“Ggg”,“playground_id”:“a32bb687-7ae3-11eb-909e-06a351dd0cca”},{“id”:“eed0ee4c-8688-11eb-909e-06a351dd0cca”,“模式”: “公开”、“时间”:“2021-03-16 19:52:18.000000”、“类型”:“游戏”、“邀请”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”]、“成员”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”]、“等待": ["ucLYuwe]", }, ]游戏”、“受邀”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”]、“会员”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”]、“等待”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”]、“admin_id”:“ucLYuwevLBayT6f2uTjdCZpVq1”、“event_name”描述”:“Ggg”,“playground_id”:“a32bb687-7ae3-11eb-909e-06a351dd0cca”},{“id”:“eed0ee4c-8688-11eb-909e-06a351dd0cca”,“模式”:“公共”,“时间”:“2021-03-16 19:52:18.000000”,“类型”:“游戏”,“邀请”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“成员”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“等待”:[” ucLYuwe]", }, ]游戏”、“受邀”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”]、“会员”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”]、“等待”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”]、“admin_id”:“ucLYuwevLBayT6f2uTjdCZpVq1”、“event_name”描述”:“Ggg”,“playground_id”:“a32bb687-7ae3-11eb-909e-06a351dd0cca”},{“id”:“eed0ee4c-8688-11eb-909e-06a351dd0cca”,“模式”:“公共”,“时间”:“2021-03-16 19:52:18.000000”,“类型”:“游戏”,“邀请”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“成员”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“等待”:[” ucLYuwe]", }, ]ucLYuwevW5f2uTjdCZpVLBay6kq1"], "members": ["ucLYuwevW5f2uTjdCZpVLBay6kq1"], "waiting": ["ucLYuwevW5f2uTjdCZpVLBay6kq1"], "admin_id": "ucLYuwevW5f2uTjdCZpVLBay6kq1", "event_name": "Tt", "description": "Ggg", "playground_id “:“a32bb687-7ae3-11eb-909e-06a351dd0cca”},{“id”:“eed0ee4c-8688-11eb-909e-06a351dd0cca”,“模式”:“公共”,“时间”:“2021-03-16 19:52:18.000000", "type": "游戏", "invited": ["ucLYuwevW5f2uTjdCZpVLBay6kq1"], "members": ["ucLYuwevW5f2uTjdCZpVLBay6kq1"], "waiting": ["ucLYuwe]", }, ]ucLYuwevW5f2uTjdCZpVLBay6kq1"], "members": ["ucLYuwevW5f2uTjdCZpVLBay6kq1"], "waiting": ["ucLYuwevW5f2uTjdCZpVLBay6kq1"], "admin_id": "ucLYuwevW5f2uTjdCZpVLBay6kq1", "event_name": "Tt", "description": "Ggg", "playground_id “:“a32bb687-7ae3-11eb-909e-06a351dd0cca”},{“id”:“eed0ee4c-8688-11eb-909e-06a351dd0cca”,“模式”:“公共”,“时间”:“2021-03-16 19:52:18.000000", "type": "游戏", "invited": ["ucLYuwevW5f2uTjdCZpVLBay6kq1"], "members": ["ucLYuwevW5f2uTjdCZpVLBay6kq1"], "waiting": ["ucLYuwe]", }, ]等待”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“admin_id”:“ucLYuwevW5f2uTjdCZpVLBay6kq1”,“event_name”:“Tt”,“描述”:“Ggg”,“playground_id”:“a32bb687-7ae3-11eb-909e-06a351dd0cca”}, {“id”:“eed0ee4c-8688-11eb-909e-06a351dd0cca”,“模式”:“公共”,“时间”:“2021-03-16 19:52:18.000000”,“类型”:“游戏”, “邀请”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“成员”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“等待”:[“ucLYuwe]”,},]等待”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“admin_id”:“ucLYuwevW5f2uTjdCZpVLBay6kq1”,“event_name”:“Tt”,“描述”:“Ggg”,“playground_id”:“a32bb687-7ae3-11eb-909e-06a351dd0cca”}, {“id”:“eed0ee4c-8688-11eb-909e-06a351dd0cca”,“模式”:“公共”,“时间”:“2021-03-16 19:52:18.000000”,“类型”:“游戏”, “邀请”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“成员”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“等待”:[“ucLYuwe]”,},]“playground_id”:“a32bb687-7ae3-11eb-909e-06a351dd0cca”},{“id”:“eed0ee4c-8688-11eb-909e-06a351dd0cca”,“模式”:“公共”,“时间”:“2021-03 -16 19:52:18.000000”,“类型”:“游戏”,“受邀”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“成员”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“等待”:[“ucLYuwe]”,},]“playground_id”:“a32bb687-7ae3-11eb-909e-06a351dd0cca”},{“id”:“eed0ee4c-8688-11eb-909e-06a351dd0cca”,“模式”:“公共”,“时间”:“2021-03 -16 19:52:18.000000”,“类型”:“游戏”,“受邀”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“成员”:[“ucLYuwevW5f2uTjdCZpVLBay6kq1”],“等待”:[“ucLYuwe]”,},]“等待”:[“ucLYuwe]”,},]“等待”:[“ucLYuwe]”,},]

如果我在数据库中只有 2 个事件,则字符串已正确关闭并且没有错误。但是,一旦我在那里有超过 2 个事件,似乎字符串变得太长或什么的,并且在没有适当转义的情况下突然结束。

我不确定来自数据库的字符是否有限制,或者客户端是否有 json 解析部分。

我在终端中遇到的错误: SyntaxError: JSON Parse error: Unterminated string

如果有人有类似的问题,请您帮忙。

谢谢!

标签: mysqlsqljsonreactjsreact-native

解决方案


像这样更改 group_concat 最大长度: SET GLOBAL group_concat_max_len = 100000; 解决它。不得不移动数据库内部因为 aws rds 不允许更改默认长度。


推荐阅读