我有一个很大的文件,不幸的是包含无效的JSON。 看起来像数组列表,不分隔,中间用逗号:
[{
"key": "value"
}]
[
[{
"key": "value",
"obj": {}
},
{}
]
]
[{
"key": "value",
"obj": {}
}]
每个方括号对中的内容本身就是一个有效JSON 。
问题是如何通过“搜索和替换”快速修复此JSON ? (或任何其他方法)
尝试了许多组合,包括将“ ] [”替换为“ ]” [”,并用另外一个方括号对包装整个文件,使其成为数组数组。 每当它给我无效的JSON。
请帮助。
答案 0 :(得分:0)
您可以将右方括号替换为']',然后将整个字符串用方括号括起来。
此代码段通过应用算法然后在结果字符串上调用eval来说明提供了示例数据的方法。
let jsonString = `[{
"key": "value"
}]
[
[{
"key": "value",
"obj": {}
},
{}
]
]
[{
"key": "value",
"obj": {}
}]`;
jsonString = jsonString.replace( /]/g, '],' );
jsonString = '[' + jsonString + ']';
myObject = eval( jsonString );
console.log( typeof myObject);
console.log( myObject.length );
console.log( myObject );
答案 1 :(得分:0)
这是一个动态的php解决方案,但是我不得不使用它作为可靠的数据源。这是创可贴。不论哪种代码产生的无效JSON NEEDS都必须尽快修复。
我的正则表达式模式将查找所有出现的]
,零个或多个空格,然后查找]
,然后在]
之后添加一个逗号。
整个字符串都用方括号括起来,以使json字符串有效。
风险可能对所有人都不是很明显-如果任何实际键或值包含符合替换条件的字符串,则它们将被损坏。这就是为什么不建议在json上使用正则表达式的原因。
代码:(Demo)
$bad_json = '[{
"key": "value"
}]
[
[{
"key": "value",
"obj": {}
},
{}
]
]
[{
"key": "value",
"obj": {}
}]';
$valid_json = "[" . preg_replace("~]\K(?=\s*\[)~", ",", $bad_json) . "]";
var_export(json_decode($valid_json, true));
输出:
array (
0 =>
array (
0 =>
array (
'key' => 'value',
),
),
1 =>
array (
0 =>
array (
0 =>
array (
'key' => 'value',
'obj' =>
array (
),
),
1 =>
array (
),
),
),
2 =>
array (
0 =>
array (
'key' => 'value',
'obj' =>
array (
),
),
),
)