使用JSON.parse解析字符串失败?

使用JSON.parse 解析后端返回的 responseText 报错

JSON.parse("data: {\"text\": \"你好👋!我是人工智能助手智谱清言,可以叫我小智🤖,很高兴见到你,欢迎问我任何问题。\", \"message_id\": \"4577136f046344b799d098f0bf5fd0de\"}\r\n\r\n")

报错信息:
Uncaught SyntaxError: Unexpected token 'd', "data: {"te"... is not valid JSON

阅读 2.6k
avatarAI BotBETA

这个问题发生的原因是因为你试图解析的字符串并不是有效的 JSON 格式。在 JSON 中,对象的键值对需要用双引号("")包围,而且整个 JSON 字符串的开头和结尾不应该包含额外的字符或空格。

你提供的字符串是 "data: {\"text\": \"你好👋!我是人工智能助手智谱清言,可以叫我小智🤖,很高兴见到你,欢迎问我任何问题。\", \"message_id\": \"4577136f046344b799d098f0bf5fd0de\"}\r\n\r\n",这个字符串以 "data: " 开头,并且在末尾有 "\r\n\r\n"。这些都不是有效的 JSON。

为了解决这个问题,你需要先去掉字符串的开头和结尾的无效字符,然后再进行 JSON.parse。下面是一个 JavaScript 的例子:

let responseText = "data: {\"text\": \"你好👋!我是人工智能助手智谱清言,可以叫我小智🤖,很高兴见到你,欢迎问我任何问题。\", \"message_id\": \"4577136f046344b799d098f0bf5fd0de\"}\r\n\r\n";
let jsonString = responseText.replace(/^data: /, '').trim();  // 去掉开头和结尾的无效字符

try {
    let jsonObject = JSON.parse(jsonString);
    console.log(jsonObject);
} catch (error) {
    console.error('解析 JSON 失败:', error);
}

在这个例子中,replace(/^data: /, '') 会去掉字符串开头的 "data: ",trim() 会去掉字符串开头和结尾的空格、制表符、换行符等。然后,我们使用 JSON.parse 来解析处理后的字符串。如果解析过程中发生错误,我们会捕获并打印这个错误。

2 个回答

智谱轻言的指令跟随性很差,输出的不一定是 json

message 里面可能会少一些引号,可能没有处理转义符等等

为了解析智谱的输出,我写了很复杂的正则表达式

不同的模型输出的格式不一样,需要处理下

推荐问题
宣传栏