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-json
parse 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
string
La chaîne de caractères à analyser en tant que JSON. Voir l’objet JSON pour une description de la syntaxe JSON. - reviver ?
Function() | null
La 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 = false
Si 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:
-
Boolean
type -
String
type
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
object
l’objet cible - source ?
object
l’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 desource
seront 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 CommentArray
s.
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
.