17 févr. 2016

[JSON] Comment parser du JSON via Linux (EN)

How to parse JSON string via command line on Linux

If you often deal with JSON-formatted texts from the command line or in shell scripts, you may wonder if there is any command-line utility which can parse JSON string. A command-line JSON parser can be handy when you test or debug JSON web services. You can feed JSON-formatted responses from web services into the command-line JSON parser, thereby easily inspecting otherwise hard-to-read JSON responses or extracting individual objects from them.

In this tutorial, I will describe how to parse JSON string from the command line.

On Linux, there is a command-line JSON processor called jq which does exactly that. Using jq, you can parse, filter, map, and transform JSON-structured data effortlessly.

To install jq on Linux, simply download its binary (available for 32-bit and 64-bit system separately) as follows.
$ wget http://stedolan.github.io/jq/download/linux32/jq (32-bit system)
$ wget http://stedolan.github.io/jq/download/linux64/jq (64-bit system)
$ chmod +x ./jq
$ sudo cp jq /usr/bin
The jq binary is also available for Windows and OS X platforms, and its full source code is released under the MIT license.

The following examples illustrate how to parse JSON-structured data with jq.

An example JSON Schema:
$ cat json.txt

{
        "name": "Google",
        "location":
                {
                        "street": "1600 Amphitheatre Parkway",
                        "city": "Mountain View",
                        "state": "California",
                        "country": "US"
                },
        "employees":
                [
                        {
                                "name": "Michael",
                                "division": "Engineering"
                        },
                        {
                                "name": "Laura",
                                "division": "HR"
                        },
                        {
                                "name": "Elise",
                                "division": "Marketing"
                        }
                ]
}
To parse a JSON object:
$ cat json.txt | jq '.name'

"Google"
To parse a nested JSON object:
$ cat json.txt | jq '.location.city'

"Mountain View"
To parse a JSON array:
$ cat json.txt | jq '.employees[0].name'

"Michael"
To extract specific fields from a JSON object:
$ cat json.txt | jq '.location | {street, city}'

{
  "city": "Mountain View",
  "street": "1600 Amphitheatre Parkway"
}


Aucun commentaire:

Enregistrer un commentaire