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

时间:2015-12-17 21:13:01

标签: javascript json regex

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

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

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

5 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

我在速度模板中也遇到了同样的问题。

您声明对象是动态插入JSON中的。所以最有可能这应该是循环。所以你可以在循环结束时添加虚拟对象。

您的力度模板应如下所示:

   {
  "data": [
  #foreach($Student in $listStudent)
    {      
        "id" : "$Student.id"
        "Name" : "$Student.name"

    },
  #end
  {"_COMMENT":"THIS IS PLACED HERE JUST TO EGNORE TRAILING COMMA AT THE END OF LAST OBJECT",
   "_COMMENT":"THIS OBJECT MUST IGNORE WHILE PARSING"
  }
  ]
}

这个技巧的唯一缺点是你必须在客户端编写一些逻辑以避免在解析JSON对象时使用虚拟对象。

答案 3 :(得分:0)

我为此目的开发了一种简单但有用的逻辑-您可以尝试一下。

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 :(得分:0)

考虑 Json 输入 = [{"ITEM1":{"names":["nameA"]}},{"ITEM2":{"names":["nameB","nameC"]}},]没有空格。 我建议使用 substring 的简单方法。

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