【问题标题】:Unable to parse JSON string containing unicode hex character无法解析包含 unicode 十六进制字符的 JSON 字符串
【发布时间】:2017-08-16 08:38:31
【问题描述】:

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

var myparsestring = JSON.parse(mystring);

错误:

JSON 中的意外标记 x

【问题讨论】:

  • 您的 JSON 编码不正确
  • var mystring = '{"Customers":[{"CustomerCity":"Zaragoza","CustomerFName":"Ana","CustomerAddress":"C/ El Temple, 9 2/ \\xbaB","CustomerCountry":"es"}]}'; var myparsestring = JSON.parse(mystring);
  • 我已经转义了特殊字符来解析它。

标签: javascript jquery json


【解决方案1】:

这只是无效的 JSON,请参阅字符串规则 on json.org。 JSON 中没有 \x 转义。 \xbaB 应该是 unicode 转义符,\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,而以上是一个非常幼稚的修复。

【讨论】:

  • 谢谢@T.J. Crowder 你的预处理字符串对我有用。我无法修复源,因为我是从第三方 API 接收的。
  • @Sarang:我很高兴听到这个消息,但请注意,如果该字符串的来源正在生成\x 序列,它很可能会做其他 无效的事情。修复实际上是修复源,而不是在之后修补字符串。
猜你喜欢
  • 2023-04-08
  • 2014-12-28
  • 2014-10-07
  • 2019-12-26
  • 1970-01-01
  • 2015-11-23
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多