这个问题发生的原因是因为你试图解析的字符串并不是有效的 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
来解析处理后的字符串。如果解析过程中发生错误,我们会捕获并打印这个错误。
智谱轻言的指令跟随性很差,输出的不一定是 json
为了解析智谱的输出,我写了很复杂的正则表达式