json数据无法解析的诡异问题

我是nodejs,post请求php服务端,返回下面这个:

{"status":0,"msg":"ok","data":{"data_id":"6|933","data_url":"http:\/\/www.xxx.com\/index.php?m=content&c=index&a=show&catid=6&id=933"}}

这样解析。

let resultObj = JSON.parse(res.text);

但是报错了。

我把返回的json字符串,自己定义变量,又可以解析。拷贝到其他在线json解析也是可以的。证明json字符串完全正确的。

打印返回的字符串大小

console.log(res.text.length);

输出 长度是:148

我用另外一台服务器测试,一样的程序,返回一样的json字符串,返回长度 147.
所以,问题就在这里了。一个是148,一个是147.为啥有这个差距。我当初觉得是编码的问题。可是两个都是utf-8编码。

目前这个错误,各位猜测是什么引起的呢?


补充一下,回答都误解我的问题了。
可以证实,返回的json字符串没有什么语法错误。因为你把字符串拷贝下来,放到别的地方解析是可以解析的。
问题就出在为啥一个返回147、一个返回148。一样的字符串内容,长度却不一样。这一般是编码什么的引起的吧。但是这个又都是utf-8环境。所以想不通这里。问题解决的关键也是这里。

阅读 6.6k
3 个回答

JSON.stringify json解析为字符串
JSON.parse 字符串解析为json
你方法用错了吗?

var res = {"status":0,"msg":"ok","data":{"data_id":"6|933","data_url":"http:\/\/www.xxx.com\/index.php?m=content&c=index&a=show&catid=6&id=933"}};
var resultObj = JSON.stringify(res);
var obj = JSON.parse(resultObj);
console.log(res, resultObj, obj);

明明可以。 都没有text这个对象
var a = '{"status":0,"msg":"ok","data":{"data_id":"6|933","data_url":"http://www.xxx.com/index.php?m=content&c=index&a=show&catid=6&id=933"}}';
var json = JSON.parse(a);
console.log(json);

我遇到过字符串末尾有\0空字符的情况,,打印出来是看不见的,但是它会占一个字节的长度,可以试试把它过滤掉~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题