JSON 从最后一个对象中删除尾随逗号
Posted
技术标签:
【中文标题】JSON 从最后一个对象中删除尾随逗号【英文标题】:JSON Remove trailiing comma from last object 【发布时间】:2016-03-24 11:54:41 【问题描述】:这个 JSON 数据被动态插入到我正在处理的模板中。我正在尝试从对象列表中删除尾随逗号。
我正在使用的 CMS 使用 Velocity,我还不太熟悉。所以我想写一个 javascript 的 sn-p 来检测最后一个对象 (ITEM2) 上的尾随逗号并将其删除。是否有一个 REGEX 可以用来检测右括号之前的任何逗号?
[
"ITEM1":
"names":[
"nameA"
]
,
"ITEM2":
"names":[
"nameB",
"nameC"
]
, // need to remove this comma!
]
【问题讨论】:
这不是合法的 JSON - 无论生成什么都需要修复。不解决这个问题只会为该输出的下一个用户增加技术债务。,\s*\]
应该这样做,但不关心字符串文字。
好的,谢谢。会的。
【参考方案1】:
你需要找到,
,之后没有任何新的属性、对象或数组。
新属性可以以引号("
或 '
)或任何单词字符(\w
)开头。
新对象只能以字符 开头。
新数组只能以字符
[
开头。
新的属性、对象或数组可以放在一堆类似空格的符号 (\s
) 之后。
所以,正则表达式将是这样的:
let regex = /\,(?!\s*?[\\[\"\'\w])/g;
像这样使用它:
// javascript
let input; // this is the initial string of data
let correct = input.replace(regex, ''); // remove all trailing commas
let data = JSON.parse(correct); // build a new JSON object based on correct string
Try the first regex.
Another approach 是查找每一个,
,之后有一个右括号。
在这种情况下,右括号是 和
]
。
同样,右括号可能放在一堆类似空格的符号 (\s
) 之后。
因此是正则表达式:
let regex = /\,(?=\s*?[\\]])/g;
用法相同。
Try the second regex.
【讨论】:
这也替换了逗号的内部字符串,例如“字母”:“a,b,c”。以下仅检查尾随逗号: fix.replace(/(.*?),\s*(\|])/g, "$1$2");【参考方案2】:对于您的具体示例,您可以像这样进行简单的搜索/替换:
,\n]$
替换字符串:
\n]
Working demo
代码
var re = /,\n]$/;
var str = '[ \n \n "ITEM1": \n "names":[ \n "nameA"\n ]\n \n ,\n \n "ITEM2": \n "names":[ \n "nameB",\n "nameC"\n ]\n \n ,\n]';
var subst = '\n]';
var result = str.replace(re, subst);
【讨论】:
【参考方案3】:我为此目的开发了一个简单但有用的逻辑 - 你可以试试这个。
Integer Cnt = 5;
String StrInput = "[";
for(int i=1; i<Cnt; i++)
StrInput +=" "
+ " \"ITEM"+i+"\": "
+ " \"names\":["
+ " \"nameA\""
+ "]"
+"";
if(i ==(Cnt-1))
StrInput += "";
else
StrInput += ",";
StrInput +="]";
System.out.println(StrInput);
【讨论】:
【参考方案4】:考虑 Json 输入 = ["ITEM1":"names":["nameA"],"ITEM2":"names":["nameB","nameC"],]没有空格。 我建议使用 substring 的简单方法。
input = input.substring(0, input.length-2);
input = input + "]";
【讨论】:
以上是关于JSON 从最后一个对象中删除尾随逗号的主要内容,如果未能解决你的问题,请参考以下文章