我的字符串是JSON形式但不是有效的JSON字符串。字符串如下所示(它的单行字符串,但为了清楚起见,我添加了新行。)
"{
clientId :\"abc\",
note:\"ATTN:Please take care of item x\"
}"
我正在尝试使用javascript正则表达式修复它(重新格式化为有效的JSON)。我目前正在使用以下正则表达式,但它不适用于第二个属性,即注意,因为它的值中包含冒号(:)。
retObject.replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:/g, '"$2": ');
我在这里尝试做的是使用正则表达式将上面的字符串重新格式化为
"{
"clientId" :"abc",
"note":"ATTN:Please take care of item x"
}"
尝试了许多方法,但由于我在RegEx中仍处于初学状态,因此无法正常使用。
答案 0 :(得分:0)
尝试将.split()
与RegExp
/[^\w\s\:]/
,.test()
与RegExp
/\:$/
,.match()
与RegExp
一起使用/\w+/
var str = "{clientId :\"abc\",note:\"ATTN:Please take care of item x\"}";
var res = {};
var arr = str.split(/[^\w\s\:]/).filter(Boolean);
for (var i = 0; i < arr.length; i++) {
if ( /\:$/.test(arr[i]) ) {
res[ arr[i].match(/\w+/) ] = arr[i + 1]
}
}
console.log(res)
答案 1 :(得分:0)
尝试使用正则表达式修复损坏的JSON是一个愚蠢的差事。就在您认为正在使用正则表达式时,您将会看到更多的gobbledygook,例如
"{ clientId :\"abc\", note:\"ATTN:Please take \"care\" of item x\" }"
其中一个字符串里面有双引号,现在你的正则表达式会失败。
为了您自己和整个团队的理智,无论是现在还是未来,都要修复产生这个破坏的JSON的上游组件。世界上所有语言都拥有完全称职的JSON序列化程序,可以创建符合要求的JSON。告诉上游人员使用它们。
如果你绝对没有选择,请使用受到谴责的评价。与邪恶相遇:
eval('(' + json.replace(/\\"/g, '"') + ')')