如何解析无效的json字符串(带十六进制值)

时间:2014-01-13 07:08:29

标签: javascript json

我在解析json字符串时遇到问题。

这是字符串(问题部分):

{
    "type":"meaning",
    "terms":[
    {
       "type":"text",
       "text":"some value.",
       "language":"ru"
    },
    {
       "type":"url",
       "text":"\x3ca href\x3d\x22http://readmas.ru/arts/bodyart/znachenie-tatuirovok.-chast-i.html\x22\x3…ttp://readmas.ru/arts/bodyart/znachenie-tatuirovok.-chast-i.html\x3c/a\x3e",
       "language":"ru"
   }]
},

注意:
这些功能对我不起作用:

  1. string replace
  2. JSON.parse
  3. $.parseJSON

1 个答案:

答案 0 :(得分:4)

与JavaScript不同,JSON notation仅支持双字节\uNNNN转义序列,而不支持\xNN序列。试试这个:

var cleaned = input.replace(/\\x([0-9a-f]{2})/g, '\\u00$1');
var output = $.parseJSON(cleaned);
console.log(output);

Demonstration

另外,为了使这个演示工作,我对你的字符串进行了一些其他修改,我认为这只是你在这里格式化问题的结果:

  • 完成了在字符串中间(\xNN)处断开的\x3…ttp转义序列。
  • 删除了对象文字末尾的逗号。

在任何情况下,如果你能使你的服务(或任何给你这个文件的东西)提供有效的JSON而不是这个,那可能会更好。