我使用如下的文件作为数据,然后让JSON.parse进行解析,但失败了,这个问题困扰我一天了。哪位能指点迷津?
我把代码放到了这里
git clone https://gitee.com/triphop/weird_json_parsing.git
需要解析的数据如下
~/tmp/x/segment $ cat feed.dat
{\"deliveryInfo\":{\"logisticsName\":\"\u2014\",\"sellerNick\":\"ltbbtl\",\"tspInfo\":{},\"address\":\"\u9053 \u5317\u4EAC\u5E02\u976291\u7A7A\u95F4136\u5BA4 \uFF0C100032\",\"showLogistics\":true,\"shipType\":\"\u5FEB\u9012\",\"logisticsNum\":\"\u2014\",\"showTSP\":false,\"asyncLogisticsUrl\":\"\/\/detail.i56.taobao.com\/call\/queryTrace.do?dimension=TRADE_ID&tradeId=62298565722066429\"} }
~/tmp/x/segment $
解析用的JavaScript代码
~/tmp/x/segment $ cat question.js
'use strict';
const util = require('util');
const fs = require('fs');
const raw = fs.readFileSync('./feed.dat', { encoding: 'utf8' });
console.log('---------------------- raw ----------------------------');
console.log(raw);
console.log('---------------------- object ----------------------------');
console.log(util.inspect(JSON.parse(raw), { colors: true }));
~/tmp/x/segment $
运行后的出错信息如下
~/tmp/x/segment $ node question.js
---------------------- raw ----------------------------
{\"deliveryInfo\":{\"logisticsName\":\"\u2014\",\"sellerNick\":\"ltbbtl\",\"tspInfo\":{},\"address\":\"\u9053 \u5317\u4EAC\u5E02\u976291\u7A7A\u95F4136\u5BA4 \uFF0C100032\",\"showLogistics\":true,\"shipType\":\"\u5FEB\u9012\",\"logisticsNum\":\"\u2014\",\"showTSP\":false,\"asyncLogisticsUrl\":\"\/\/detail.i56.taobao.com\/call\/queryTrace.do?dimension=TRADE_ID&tradeId=62298565722066429\"} }
---------------------- object ----------------------------
undefined:1
{\"deliveryInfo\":{\"logisticsName\":\"\u2014\",\"sellerNick\":\"ltbbtl\",\"tspInfo\":{},\"address\":\"\u9053 \u5317\u4EAC\u5E02\u976291\u7A7A\u95F4136\u5BA4 \uFF0C100032\",\"showLogistics\":true,\"shipType\":\"\u5FEB\u9012\",\"logisticsNum\":\"\u2014\",\"showTSP\":false,\"asyncLogisticsUrl\":\"\/\/detail.i56.taobao.com\/call\/queryTrace.do?dimension=TRADE_ID&tradeId=62298565722066429\"} }
^
SyntaxError: Unexpected token \ in JSON at position 1
at JSON.parse (<anonymous>)
at Object.<anonymous> (/home/hyan/tmp/x/segment/question.js:10:31)
at Module._compile (module.js:571:32)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:488:32)
at tryModuleLoad (module.js:447:12)
at Function.Module._load (module.js:439:3)
at Module.runMain (module.js:605:10)
at run (bootstrap_node.js:420:7)
at startup (bootstrap_node.js:139:9)
可如果我这样操作就没问题
~/tmp/x/segment $ node
> const raw = `{\"deliveryInfo\":{\"logisticsName\":\"\u2014\",\"sellerNick\":\"ltbbtl\",\"tspInfo\":{},\"address\":\"\u9053 \u5317\u4EAC\u5E02\u976291\u7A7A\u95F4136\u5BA4 \uFF0C100032\",\"showLogistics\":true,\"shipType\":\"\u5FEB\u9012\",\"logisticsNum\":\"\u2014\",\"showTSP\":false,\"asyncLogisticsUrl\":\"\/\/detail.i56.taobao.com\/call\/queryTrace.do?dimension=TRADE_ID&tradeId=62298565722066429\"} }
... `;
undefined
> JSON.parse(raw)
{ deliveryInfo:
{ logisticsName: '—',
sellerNick: 'ltbbtl',
tspInfo: {},
address: '道 北京市面91空间136室 ,100032',
showLogistics: true,
shipType: '快递',
logisticsNum: '—',
showTSP: false,
asyncLogisticsUrl: '//detail.i56.taobao.com/call/queryTrace.do?dimension=TRADE_ID&tradeId=62298565722066429' } }
>
这到底是为啥啊???
手动输入的打印出来是没有转义符号
\
的,从文件读取出来,然后打印的是有\
,所以手动测试的是正常的。但是原因不清楚,可以暂时将所有无用的
\
去掉,除了\u