如何使用HTML标记JSON.parse一个字符串?

时间:2015-11-08 14:59:43

标签: javascript html json

我有一个这样的字符串:

{"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();

4 个答案:

答案 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, ""));