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

JSON Remove trailing comma from last object

本文关键字:删除 最后 一个对象 JSON      更新时间:2023-09-26

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

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

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

你需要找到,,之后没有任何新的属性、对象或数组.
新属性可以以引号("'(或任何单词字符('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

尝试第一个正则表达式。

<小时 />

另一种方法是找到每个,,之后有一个右括号.
在这种情况下,右括号是}].
同样,右括号可以放在一堆类似空格的符号('s(之后。

因此正则表达式:

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

用法是相同的。

尝试第二个正则表达式。

考虑 Json 输入 = [{"ITEM1":{"names":["nameA"]}},{">

ITEM2":{"names":["nameB","nameC"]}},] 没有空格。我建议使用子字符串的简单方法。

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

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

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

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

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

您可以使用正则表达式删除复杂 json 字符串中的尾随逗号

  const regex = /,'s*([']}])/g;
  const fixedJson = jsonString.replace(regex, "$1");
  const json = JSON.parse(fixedJson);
``

提议的正则表达式方法存在问题。如果要规范化的 JSON 字符串是

var jstring = '{"a":"5,}", "z":{"x":2,}, "b":4,}';

然后应用 jstring.replace(regex, '') 也将删除字符串 jstring.a = "5,}"5后的逗号。这是不可取的。

另一种不诉诸正则表达式的方法是:

eval(`var result=${jstring}`)
JSON.stringify(result)