JSON中的意外令牌,用于特殊字符

时间:2019-01-09 14:14:50

标签: node.js post request

为什么尝试发送包含SyntaxError: Unexpected token < in JSON at position 0中的字符(例如postbody)的请求时得到吗?

这是我发送请求的方式(我已经添加了硬编码的正文作为示例):

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);
        }
      });
    });
  }
}

2 个答案:

答案 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相比如何。