代码之家  ›  专栏  ›  技术社区  ›  Sarang

无法分析包含unicode十六进制字符的JSON字符串

  •  1
  • Sarang  · 技术社区  · 8 年前

    var mystring = '{"Customers":[{"CustomerCity":"Zaragoza","CustomerFName":"Ana","CustomerAddress":"C/ El Temple, 9 2\\xbaB","CustomerCountry":"es"}]}';
    
    var myparsestring = JSON.parse(mystring);

    错误:

    1 回复  |  直到 8 年前
        1
  •  9
  •   T.J. Crowder    8 年前

    这只是无效的JSON,请参阅字符串规则 on json.org . 没有 \x \xbaB \u0baB (请注意,必须正好有四个十六进制数字):

    var mystring ='{"Customers":[{"CustomerCity":"Zaragoza","CustomerFName":"Ana","CustomerAddress":"C/ El Temple, 9 2\\u0baB","CustomerCountry":"es"}]}';
    
    var obj = JSON.parse(mystring);
    console.log(obj);

    您可以尝试预处理字符串:

    mystring = mystring.replace(/\\x([0-9a-f]{1,4})/gi, function(m, c0) {
        return "\\u" + ("0000" + c0).slice(-4);
    });
    

    var mystring ='{"Customers":[{"CustomerCity":"Zaragoza","CustomerFName":"Ana","CustomerAddress":"C/ El Temple, 9 2\\xbaB","CustomerCountry":"es"}]}';
    
    // Fixing it
    mystring = mystring.replace(/\\x([0-9a-f]{1,4})/gi, function(m, c0) {
        return "\\u" + ("0000" + c0).slice(-4);
    });
    
    var obj = JSON.parse(mystring);
    console.log(obj);

    ...但真的是这样 最好修复JSON的源代码,使其生成有效的JSON,以上是一个非常简单的修复。