我从许多文件中读取了一个类似 JSON 的字符串,这些文件具有类似 JSON 的语法,没有用逗号分隔根键值对(例如 "name": "Apple Beery"
而不是 “名称”:“苹果啤酒”,
):
var data = `{
"name": "Apple Beery"
"phrases": [
"a",
"b",
"It's"
]
"reference": 19
"friends": [
{
"name": "Dog",
"reference": 14
},
{
"name": "Markus Beery",
"reference": 30
}
]
"last": "b"
}`;
有没有办法将动态逗号添加回 JSON 字符串,以便可以像这样解析 JSON:
var data = JSON.parse(`{
"name": "Apple Beery",
"phrases": [
"a",
"b",
"It's"
],
"reference": 19,
"friends": [
{
"name": "George Beery",
"reference": 14
},
{
"name": "Markus Beery",
"reference": 30
}
],
"last": "b"
}`);
最佳答案
您可以使用正则表达式来匹配一行中的最后一个字符(除逗号、{
或 [
之外的任何字符)),并且如果下一行以以下字符开头{
、[
或 "
,替换为该字符加逗号。如果下一行可能有数字,请添加 \d
也进入最终字符集:
const data = `{
"name": "Apple Beery"
"phrases": [
"a",
"b",
"It's"
]
"reference": 19
"friends": [
{
"name": "Dog",
"reference": 14
},
{
"name": "Markus Beery",
"reference": 30
}
]
"last": "b"
}`;
const json = data.replace(/[^,{[](?=\n *["[{\d])/gm, '$&,');
console.log(JSON.parse(json));
模式
[^,{[](?=\n *["[{\d])
意思是:
[^,{[]
- 不是逗号、{
或[
的任何字符
(?=\n *["[{\d])
- 前瞻:\n *
- 换行符,后跟任意数量的空格,并且["[{\d]
- 除[
、{
或数字 之外的任何字符
关于javascript - 将逗号分隔符添加到其他有效的 JSON 字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53992665/