JSON: vers une nouvelle mouture ?

Vous connaissez JSON ? C'est une représentation "simplifiéé d'un objet en JavaScript. Quand je dis simplifié, c'est simplifié, car:

  • Nous ne pouvons pas mettre de commentaire
  • Nous devons impérativement utiliser des double-quotes
  • Un certain nombre de valeurs sont autorisés, à savoir
    • null
    • Des strings
    • Des numériques
    • Des booléens
    • Des objets composés des valeurs précédentes
    • Des tableaux composés des valeurs précédentes



Ainsi, certains valeurs comme NaN, Infinity+, etc ... ne peuvent pas pris en compte. Ni certaines représentations de valeurs comme de l'unicode ou de l'hexadécimal.

Pour tout ce qui est commentaire (commentaire en ligne, ou en bloc), Sindre Sorhus, le papa de Bower et membre actif dans la communauté JavaScript, a eu la gentillesse de nous fournir "strip-json-comments". C'est un module NodeJs qui permet de lire un fichier JSON, même si ce dernier contient des commentaires. Pour le reste nous n'avions pas grand chose.


Dorénavant, il existe un projet qui se nomme "JSON5". Le principe est de promouvoir une extension du format JSON afin qu'il puisse prendre en compte:
  • Des virgules oubliés (souvent en fin de la dernière ligne de propriété d'un JSON ou d'un tableau)
  • Utiliser des simple quote au lieu des double quotes
  • Déclarer des strings sur plusieurs lignes
  • Utiliser les NaN, Infinity+ ou encore du code hexadécimal
  • Utiliser des commentaires

Le module NodeJs s'inspire de l'API HTML5 pour le JSON, à savoir proposer une méthode "parse" pour convertir un texte en JSON, une méthode "stringify" pour convertir un JSON en texte.

Ainsi, nous pouvons avoir du JSON comme suit:


{
    foo: 'bar',
    while: true,

    this: 'is a \
multi-line string',

    // this is an inline comment
    here: 'is another', // inline comment

    /* this is a block comment
       that continues on another line */

    hex: 0xDEADbeef,
    half: .5,
    delta: +10,
    to: Infinity,   // and beyond!

    finally: 'a trailing comma',
    oh: [
        "we shouldn't forget",
        'arrays can have',
        'trailing commas too',
    ],
}
Ou encore

// This file is written in JSON5 syntax, naturally, but npm needs a regular
// JSON file, so compile via `npm run build`. Be sure to keep both in sync!

{
    name: 'json5',
    version: '0.4.0',
    description: 'JSON for the ES5 era.',
    keywords: ['json', 'es5'],
    author: 'Aseem Kishore <aseem.kishore@gmail.com>',
    contributors: [
        // TODO: Should we remove this section in favor of GitHub's list?
        // https://github.com/aseemk/json5/contributors
        'Max Nanasy <max.nanasy@gmail.com>',
        'Andrew Eisenberg <andrew@eisenberg.as>',
        'Jordan Tucker <jordanbtucker@gmail.com>',
    ],
    main: 'lib/json5.js',
    bin: 'lib/cli.js',
    dependencies: {},
    devDependencies: {
        mocha: '~1.0.3',    // TODO: Look into Mocha v2.
    },
    scripts: {
        build: './lib/cli.js -c package.json5',
        test: 'mocha --ui exports --reporter spec',
            // TODO: Would it be better to define these in a mocha.opts file?
    },
    homepage: 'http://json5.org/',
    license: 'MIT',
    repository: {
        type: 'git',
        url: 'https://github.com/aseemk/json5.git',
    },
}

Commentaires

Posts les plus consultés de ce blog

ISO: liens & outils utiles

NodeJs et SSL: une petite analyse

Créer sa commande slack en quelques minutes