为什么尝试发送包含SyntaxError: Unexpected token < in JSON at position 0
中的字符(例如post
或body
)的–
请求时得到’
吗?
这是我发送请求的方式(我已经添加了硬编码的正文作为示例):
import request from 'request';
export default {
postScriptRequest(body) {
return new Promise((resolve, reject) => {
const options = {
'method': 'post',
'body': JSON.stringify({
"text": "Sending – instead of - and ’ instead of ' returns Unexpected token in JSON"
}),
'headers': {
'Content-Length': JSON.stringify(body).length
},
'url': 'my-url.com'
}
request(options, (error, response, body) => {
if(response.statusCode == 200) {
resolve(body);
}
else {
reject(response.statusCode);
}
});
});
}
}
答案 0 :(得分:1)
测试问题是否是长度的一种简单方法是改为使用缓冲区。那就是:
let buffer = new Buffer(JSON.stringify(...));
// use buffer.length instead of string length
// pass buffer.toString() as the body
(缓冲区长度正确地是消息的总 bytes 长度,而不是 characters 的数量。)
答案 1 :(得分:1)
您可能需要指定(作为标题)
"Content-type": "application/json; charset=UTF-8"
并计算正确的content-length,因为javscript字符串长度不一定是content-length所需的字节长度:
您可以根据以下内容计算内容长度:
"1こ3".split('').reduce((a,c,i)=>a+c.charCodeAt(0).toString("16").length/2,0)
但是我不确定此字节长度计算与other solutions相比如何。