Json: Difference between revisions

From miki
Jump to navigation Jump to search
 
(4 intermediate revisions by the same user not shown)
Line 5: Line 5:
;Tools
;Tools
* [https://ravilabio.info/notes/unix/jq.html jq] — a command-line tool for manipulating JSON.
* [https://ravilabio.info/notes/unix/jq.html jq] — a command-line tool for manipulating JSON.
:* [https://nigeltao.github.io/blog/2020/jsonptr.html jsonptr] — same, but extra speed and safety.
* [https://github.com/tidwall/jj jj] — JSON Stream Editor (command line utility).
* [https://github.com/tidwall/jj jj] — JSON Stream Editor (command line utility).


Line 97: Line 98:
{ "name" : "my_beautiful_project" }
{ "name" : "my_beautiful_project" }
</source>
</source>

== Tips ==
=== Convert CSV to JSON ===
<source lang="bash">
jq -R -r 'split(",") | {name:.[0],age:.[1]}' file.csv
</source>

== Query JSON with [https://ravilabio.info/notes/unix/jq.html jq] ==
Let's consider this sample JSON:
<source lang="json">
[
{
"tabs": [
{
"title": "foo",
"windows": [
{
"columns": 137,
"title": "first",
"lines": 74,
}
]
},
{
"title": "bar",
"windows": [
{
"columns": 68,
"lines": 74,
"title": "one"
},
{
"columns": 67,
"lines": 37,
"title": "two"
},
{
"columns": 67,
"lines": 37,
"title": "three"
}
]
}
]
}
]
</source>

* Query the <code>lines</code> of <code>windows</code> with <code>title == "two"</code>

<source lang="bash">
# Note the anonymous root array
jq '.[].tabs[].windows[] | select( .title == "two" ) | .lines' kitty.json
</source>

== Query JSON with Python ==
See [[Python]].

Latest revision as of 11:04, 25 July 2023

References

Tools
  • jq — a command-line tool for manipulating JSON.
  • jsonptr — same, but extra speed and safety.
  • jj — JSON Stream Editor (command line utility).

Specification

object
    {}
    { members } 
members
    pair
    pair , members
pair
    string : value
array
    []
    [ elements ]
elements
    value
    value , elements
value
    string
    number
    object
    array
    true
    false
    null
string
    ""
    " chars "
chars
    char
    char chars
char
    any-Unicode-character-
        except-"-or-\-or-
        control-character
    \"
    \\
    \/
    \b
    \f
    \n
    \r
    \t
    \u four-hex-digits
number
    int
    int frac
    int exp
    int frac exp 
int
    digit
    digit1-9 digits
    - digit
    - digit1-9 digits 
frac
    . digits
exp
    e digits
digits
    digit
    digit digits
e
    e
    e+
    e-
    E
    E+
    E-

JSON query

Example of query:

{ "name" : "my_beautiful_project" }

Tips

Convert CSV to JSON

jq -R -r 'split(",") | {name:.[0],age:.[1]}' file.csv

Query JSON with jq

Let's consider this sample JSON:

[
   {
   "tabs": [
     {
       "title": "foo",
       "windows": [
         {
           "columns": 137,
           "title": "first",
           "lines": 74,
         }
       ]
     },
     {
       "title": "bar",
       "windows": [
         {
           "columns": 68,
           "lines": 74,
           "title": "one"
         },
         {
           "columns": 67,
           "lines": 37,
           "title": "two"
         },
         {
           "columns": 67,
           "lines": 37,
           "title": "three"
         }
       ]
     }
   ]
   }
]
  • Query the lines of windows with title == "two"
# Note the anonymous root array
jq '.[].tabs[].windows[] | select( .title == "two" ) | .lines' kitty.json

Query JSON with Python

See Python.