regex JSON从最后一个对象中删除尾随逗号

t0ybt7op  于 2022-11-18  发布在  其他
关注(0)|答案(4)|浏览(171)

这个JSON数据被动态地插入到我正在处理的模板中。我试图从对象列表中删除尾部的逗号。
我正在使用的CMS使用Velocity,我还不太熟悉它。所以我希望编写一个JavaScript代码片段,它可以检测最后一个对象(ITEM2)上的尾随逗号并将其删除。有没有一个REGEX可以用来检测右括号之前的任何逗号?

[  
   {  
      "ITEM1":{  
         "names":[  
            "nameA"
         ]
      }
   },
   {  
      "ITEM2":{  
         "names":[  
            "nameB",
            "nameC"
         ]
      }
   }, // need to remove this comma!
]
u0njafvf

u0njafvf1#

您需要找到,,在此之后没有任何新的属性、对象或数组。
新属性可以以引号("')或任何单词字符(\w)开头。
新对象只能以字符{开头。
新数组只能以字符[开头。
新的属性、对象或数组可以放在一串类似空格的符号(\s)之后。
因此,正则表达式将如下所示:

const regex = /\,(?!\s*?[\{\[\"\'\w])/g;

使用方法如下:

// javascript
const json = input.replace(regex, ''); // remove all trailing commas (`input` variable holds the erroneous JSON)
const data = JSON.parse(json); // build a new JSON object based on correct string

Try the first regex
另一种方法是找到每个,,其后有一个右括号。
在这种情况下,右括号为}]
同样,右括号可以放在一串类似空格的符号(\s)之后。
因此,正则表达式:

const regex = /\,(?=\s*?[\}\]])/g;

用法相同。
是的。

klh5stk1

klh5stk12#

对于您的特定示例,您可以执行如下简单的搜索/替换:

,\n]$

替换字符串:

\n]

编码

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);
c3frrgcw

c3frrgcw3#

考虑不带空格的Json输入= [{“ITEM 1”:{“names”:[“nameA”]}},{“ITEM 2”:{“names”:[“nameB”,“nameC”]}},]。我建议使用substring的简单方法。

input = input.substring(0, input.length-2);
input = input + "]";
nimxete2

nimxete24#

我为此开发了一个简单但有用的逻辑--你可以试试这个。

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);

相关问题