VIM : formater le JSON

Aujourd’hui nous allons voir comment formater un json un peu crade pour le transformer en quelques choses de plus sympathique.

Soit le JsonSchema suivant

1
{"$schema":"http://json-schema.org/draft-04/schema#","type":"object","properties":{"address":{"type":"object","properties":{"streetAddress":{"type":"string"},"city":{"type":"string"}},"required":["streetAddress","city"]},"phoneNumber":{"type":"array","items":{"type":"object","properties":{"location":{"type":"string"},"code":{"type":"integer"}},"required":["location","code"]}}},"required":["address","phoneNumber"]}

Pas de retour à la ligne.

Grâce à la commande suivante.

1
:%!python -m json.tool

Le fichier devient

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "properties": {
        "address": {
            "properties": {
                "city": {
                    "type": "string"
                },
                "streetAddress": {
                    "type": "string"
                }
            },
            "required": [
                "streetAddress",
                "city"
            ],
            "type": "object"
        },
        "phoneNumber": {
            "items": {
                "properties": {
                    "code": {
                        "type": "integer"
                    },
                    "location": {
                        "type": "string"
                    }
                },
                "required": [
                    "location",
                    "code"
                ],
                "type": "object"
            },
            "type": "array"
        }
    },
    "required": [
        "address",
        "phoneNumber"
    ],
    "type": "object"
}

On utilise en pratique python pour réécrire le code.

Vous pouvez essayer

1
python -m json.tool <le fichier>.json

Ce qui est pratique est que python est installé par défaut sous Linux. Il existe aussi jq, mais il n’est pas par défaut.