Parse et stringifie JSON avec des commentaires. Il conservera les commentaires même après avoir été sauvegardé!
- Parse les chaînes JSON avec des commentaires en objets JavaScript et MAINTIENT les commentaires
- supports des commentaires partout, oui, PARTOUT dans un fichier JSON, éventuellement 😆
- corrige le problème connu sur les commentaires à l’intérieur des tableaux.
- Transformer les objets en chaînes JSON avec des commentaires s’il y en a
L’utilisation de comment-json est exactement la même que celle de l’objet vanille JSON.
- Table des matières
- Pourquoi ?
- Comment ?
- Install
- Usage
- Trier les clés
- parse()
- Parse en un objet sans commentaires
- Cas particuliers
- stringify()
- espace
- assign(cible : objet, source? : objet, clés? : tableau)
- Cas particuliers concernant les clés
- Tableau de commentaires
- Cas particuliers sur la virgule de fin
Table des matières
- Pourquoi et comment
- Utilisation et exemples
- Référence à l’API
- .
- parse
- stringify
- assign
- CommentArray
- Changement des journaux
Pourquoi ?
Il y a beaucoup d’autres bibliothèques qui peuvent traiter le JSON avec des commentaires, comme json5, ou strip-json-comments, mais aucune d’entre elles ne peut stringifier l’objet analysé et renvoyer une chaîne JSON identique au contenu original.
Imaginez que si les paramètres de l’utilisateur sont enregistrés dans ${library}.json, et que l’utilisateur a écrit beaucoup de commentaires pour améliorer la lisibilité. Si la bibliothèque library a besoin de modifier le paramètre de l’utilisateur, comme modifier certaines valeurs de propriété et ajouter de nouveaux champs, et si la bibliothèque utilise json5 pour lire les paramètres, tous les commentaires disparaîtront après avoir été modifiés, ce qui rendra les gens fous.
Donc, si vous voulez analyser une chaîne JSON avec des commentaires, la modifier, puis la sauvegarder à nouveau, comment-json est votre choix incontournable !
Comment ?
comment-jsonparse les chaînes JSON avec des commentaires et enregistre les tokens de commentaires dans les propriétés des symboles.
Pour le tableau JSON avec des commentaires, comment-json étend l’objet vanille Array en CommentArray dont les instances pourraient gérer les changements de commentaires même après qu’un tableau de commentaires soit modifié.
Install
$ npm i comment-json
Pour les développeurs TypeScript, @types/comment-json pourrait être utilisé
Depuis 2.4.1, comment-json contient des déclarations typescript, donc vous pourriez aussi bien supprimer @types/comment-json.
Usage
package.json:
{// package name"name": "comment-json"}
Trier les clés
C’est un cas d’utilisation courant pour trier les clés d’un fichier JSON
Pour des détails sur assign, voir ici.
parse()
parse(text, reviver? = null, remove_comments? = false): object | string | number | boolean | null
- texte
stringLa chaîne de caractères à analyser en tant que JSON. Voir l’objet JSON pour une description de la syntaxe JSON. - reviver ?
Function() | nullLa valeur par défaut estnull. Il agit de la même manière que le deuxième paramètre deJSON.parse. Si c’est une fonction, prescrit la façon dont la valeur produite à l’origine par l’analyse syntaxique est transformée, avant d’être retournée. - remove_comments ?
boolean = falseSi vrai, les commentaires ne seront pas maintenus, ce qui est souvent utilisé quand on veut obtenir un objet propre.
Retourne object | string | number | boolean | null correspondant au texte JSON donné.
Si le content est :
Et la valeur de parsed sera :
Il y a HUIT types de propriétés de symboles :
Et la valeur de chaque propriété de symbole est un tableau de CommentToken
interface CommentToken {type: 'BlockComment' | 'LineComment'// The content of the comment, including whitespaces and line breaksvalue: string// If the start location is the same line as the previous token,// then `inline` is `true`inline: boolean// But pay attention that,// locations will NOT be maintained when stringifiedloc: CommentLocation}interface CommentLocation {// The start location begins at the `//` or `/*` symbolstart: Location// The end location of multi-line comment ends at the `*/` symbolend: Location}interface Location {line: numbercolumn: number}
Parse en un objet sans commentaires
console.log(parse(content, null, true))
Et le résultat sera :
{foo: 1,bar:}
Cas particuliers
const parsed = parse(`// comment1`)console.log(parsed === 1)// false
Si nous analysons un JSON de type primitif avec remove_comments:false, alors la valeur de retour de parse() sera de type objet.
La valeur de parsed est équivalente à:
Ce qui est similaire pour:
-
Booleantype -
Stringtype
Par exemple
const parsed = parse(`"foo" /* comment */`)
Ce qui est équivalent à
Mais il y a une exception :
const parsed = parse(`// commentnull`)console.log(parsed === null) // true
stringify()
stringify(object: any, replacer?, space?): string
Les arguments sont les mêmes que ceux de la vanille JSON.stringify.
Et elle fait la même chose que la vanille, mais traite aussi des propriétés supplémentaires et les convertit en commentaires.
console.log(stringify(parsed, null, 2))// Exactly the same as `content`
espace
Si l’espace n’est pas spécifié, ou si l’espace est une chaîne vide, le résultat de stringify() n’aura pas de commentaires.
Pour le cas ci-dessus :
console.log(stringify(result)) // {"a":1}console.log(stringify(result, null, 2)) // is the same as `code`
assign(cible : objet, source? : objet, clés? : tableau)
- cible
objectl’objet cible - source ?
objectl’objet source. Ce paramètre est facultatif mais il est idiot de ne pas passer cet argument. - clés ?
Array<string>S’il n’est pas spécifié, toutes les propriétés propres énumérables desourceseront utilisées.
Cette méthode est utilisée pour copier les propriétés propres énumérables et leurs propriétés de symbole de commentaire correspondantes vers l’objet cible.
Cas particuliers concernant les clés
Mais si l’argument keys est spécifié et n’est pas vide, alors le commentaire before all, qui n’appartient à aucune propriété, ne sera PAS copié.
const obj = assign({bar: 'baz'}, parsed, )stringify(obj, null, 2)// {// "bar": "baz",// // This is a comment// "foo": "bar"// }
Spécifier l’argument keys comme un tableau vide indique qu’il ne copiera que les symboles de commentaires n’appartenant à aucune propriété
const obj = assign({bar: 'baz'}, parsed, )stringify(obj, null, 2)// // before all// {// "bar": "baz",// }
Les symboles n’appartenant à aucune propriété comprennent :
Symbol.for('before-all')Symbol.for('before')Symbol.for('after-all')
Tableau de commentaires
Section avancée
Tous les tableaux de l’objet analysé sont CommentArrays.
On pourrait accéder au constructeur de CommentArray par :
const {CommentArray} = require('comment-json')
Si on modifie un tableau de commentaires, ses propriétés de symboles de commentaires pourraient être traitées automatiquement.
Oh oui ! 😆
Mais attention, si vous réassignez la propriété d’un tableau de commentaires avec un tableau normal, tous les commentaires disparaîtront :
A la place, nous devrions :
Cas particuliers sur la virgule de fin
Si nous avons une chaîne JSON str
.