我有一个这样的字符串:
{"Restriction":"<wbr><a href=\"https://www.google.com.tw/#q=%E4%B8%AD%E5%9C%8B\"
target=\"_blank\"><span style=\"color: rgb(0, 0, 205);\">more info</span></a></wbr>"}
但我无法用JSON.parse解析它。我的代码如下所示:
var s = '{"Restriction":"<wbr><a href=\"https://www.google.com.tw/#q=%E4%B8%AD%E5%9C%8B\" target=\"_blank\"><span style=\"color: rgb(0, 0, 205);\">more info</span></a></wbr>"}';
var obj = JSON.parse(s);
我得到了错误:
Uncaught SyntaxError:意外的令牌。
我的猜测是“\”出错了,但我无法更改字符串,因为我是通过调用远程API得到的。这是我的代码:
// We need this to build our post string
var querystring = require('querystring');
var http = require('http');
var fs = require('fs');
function PostCode(codestring) {
// An object of options to indicate where to post to
var post_options = {
host: 'api.domain',
port: '80',
path: '/webservice/service.asmx/method?key=123456',
method: 'GET',
headers: {
'Content-Type': 'text/plain'
}
};
// Set up the request
var post_req = http.request(post_options, function(res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
var x = {};
console.log('Response down');
x = JSON.parse(chunk);
});
});
post_req.end();
}
PostCode();
答案 0 :(得分:4)
这不是一个有效的JSON。反斜杠也应该被转义。
var s = '{"Restriction":"<wbr><a href=\\"https://www.google.com.tw/#q=%E4%B8%AD%E5%9C%8B\\" target=\\"_blank\\"><span style=\\"color: rgb(0, 0, 205);\\">more info</span></a></wbr>"}';
JSON.parse(s); // correct
我认为,您应该向此remote API
发布错误报告。
答案 1 :(得分:2)
您无法解析数据块,需要加载所有数据。
var post_req = http.request(post_options, function(res) {
res.setEncoding('utf8');
var json = '';
res.on('data', function (chunk) {
// Why this arg called chunk? That's not all data yet
json += chunk;
});
res.on('end', function(){
// Here we get it all
console.log(JSON.parse(json));
});
});
答案 2 :(得分:0)
要解析那些html属性,您需要双重转义引号: \\“,因为它们是两层向下。或者,最好是,可以使用单引号作为属性。
答案 3 :(得分:0)
您可以使用replace
:
var s = '{"Restriction":"<wbr><a href=\"https://www.google.com.tw/#q=%E4%B8%AD%E5%9C%8B\" target=\"_blank\"><span style=\"color: rgb(0, 0, 205);\">more info</span></a></wbr>"}';
console.log(s);
console.log(s.replace(/\"/g, ""));