JSON Supprimer la virgule traçante du dernier objet

Ces données JSON sont intégrées dynamiquement dans un modèle sur lequel je travaille. J'essaie de supprimer la virgule de départ de la liste des objets.

Le CMS que je travaille utilise Velocity, dont je ne suis pas trop familier. Je cherchais donc à écrire un extrait de JavaScript qui détecte cette virgule de départ sur le dernier objet (ITEM2) et le supprime. Existe-t-il un REGEX que je peux utiliser pour détecter n'importe quelle virgule avant ce support de fermeture?

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

Vous devez trouver , après quoi il n'y a aucun nouveau attribut, objet ou tableau.
Un nouvel attribut pourrait commencer avec des guillemets ( " ou ' ) ou avec n'importe quel caractère de mot ( \w ).
Un nouvel objet ne pourrait commencer que avec le caractère { .
Le nouveau tableau pourrait commencer uniquement avec le caractère [ .
Un nouvel attribut, objet ou tableau pourrait être placé après un tas de symboles similaires aux espaces ( \s ).

Donc, la regex sera comme ceci:

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

Utilisez-le comme ceci:

 // 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 

Essayez le premier regex .


Une autre approche est de trouver chaque , après quoi il existe un support de fermeture.
Les parenthèses de fermeture dans ce cas sont } et ] .
Encore une fois, des crochets de fermeture pourraient être placés après un tas de symboles similaires aux espaces ( \s ).

D'où le regexp:

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

L'utilisation est la même.

Essayez la deuxième regex .

Pour votre exemple spécifique, vous pouvez effectuer une recherche / remplacement simple comme ceci:

 ,\n]$ 

Chaîne de remplacement:

 \n] 

Démonstration de travail

Code

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