JSON从最后一个对象中删除trailiing逗号

mrt*_*nyb 6 javascript regex json

这个JSON数据正在动态插入到我正在处理的模板中.我正在尝试从对象列表中删除尾随逗号.

我正在使用的CMS使用Velocity,我还不太熟悉.所以我希望编写一段JavaScript代码来检测最后一个对象(ITEM2)上的尾随逗号并将其删除.是否有一个REGEX,我可以用来检测任何逗号之前的逗号?

[  
   {  
      "ITEM1":{  
         "names":[  
            "nameA"
         ]
      }
   },
   {  
      "ITEM2":{  
         "names":[  
            "nameB",
            "nameC"
         ]
      }
   }, // need to remove this comma!
]
Run Code Online (Sandbox Code Playgroud)

Dmi*_*sky 17

你需要找到,,之后没有任何新的属性,对象或数组.
新属性可以使用引号("')或任何单词字符(\w)开头.
新对象只能从字符开始{.
新数组只能从字符开始[.
新属性,对象或数组可以放在一堆类似空格的符号(\s)之后.

所以,正则表达式将是这样的:

let regex = /\,(?!\s*?[\{\[\"\'\w])/g;
Run Code Online (Sandbox Code Playgroud)

像这样使用它:

// 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
Run Code Online (Sandbox Code Playgroud)

试试第一个正则表达式.


另一种方法是找到每一个,,之后有一个结束括号.
在这种情况下,结束括号是}].
同样,关闭括号可能放在一堆类似空格的符号(\s)之后.

因此正则表达式:

let regex = /\,(?=\s*?[\}\]])/g;
Run Code Online (Sandbox Code Playgroud)

用法是一样的.

试试第二个正则表达式.

  • 这也将替换逗号的内部字符串,例如{“ letters”:“ a,b,c”}。以下仅检查结尾的逗号:fix.replace(/(。*?),\ s *(\} | \])/ g,“ $ 1 $ 2”); (2认同)

Fed*_*zza 1

对于您的具体示例,您可以像这样进行简单的搜索/替换:

,\n]$
Run Code Online (Sandbox Code Playgroud)

替换字符串:

\n]
Run Code Online (Sandbox Code Playgroud)

工作演示

代码

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);
Run Code Online (Sandbox Code Playgroud)