2022-01-21 09:26:09 +00:00
# JSON
Encode and decode to and from JSON. Note that YAML is a _superset_ of JSON - so `yq` can read any json file without doing anything special.
This means you don't need to 'convert' a JSON file to YAML - however if you want idiomatic YAML styling, then you can use the `-P/--prettyPrint` flag, see examples below.
2022-02-06 03:39:46 +00:00
{% hint style="warning" %}
Note that versions prior to 4.18 require the 'eval/e' command to be specified. 
`yq e <exp> <file>`
{% endhint %}
2022-01-21 09:26:09 +00:00
## Parse json: simple
JSON is a subset of yaml, so all you need to do is prettify the output
Given a sample.json file of:
```json
{"cat": "meow"}
```
then
```bash
2022-01-27 06:21:10 +00:00
yq -P '.' sample.json
2022-01-21 09:26:09 +00:00
```
will output
```yaml
cat: meow
```
## Parse json: complex
JSON is a subset of yaml, so all you need to do is prettify the output
Given a sample.json file of:
```json
{"a":"Easy! as one two three","b":{"c":2,"d":[3,4]}}
```
then
```bash
2022-01-27 06:21:10 +00:00
yq -P '.' sample.json
2022-01-21 09:26:09 +00:00
```
will output
```yaml
a: Easy! as one two three
b:
c: 2
d:
- 3
- 4
```
## Encode json: simple
Given a sample.yml file of:
```yaml
cat: meow
```
then
```bash
2022-01-27 06:21:10 +00:00
yq -o=json '.' sample.yml
2022-01-21 09:26:09 +00:00
```
will output
```json
{
"cat": "meow"
}
```
## Encode json: simple - in one line
Given a sample.yml file of:
```yaml
cat: meow # this is a comment, and it will be dropped.
```
then
```bash
2022-01-27 06:21:10 +00:00
yq -o=json -I=0 '.' sample.yml
2022-01-21 09:26:09 +00:00
```
will output
```json
{"cat":"meow"}
```
## Encode json: comments
Given a sample.yml file of:
```yaml
cat: meow # this is a comment, and it will be dropped.
```
then
```bash
2022-01-27 06:21:10 +00:00
yq -o=json '.' sample.yml
2022-01-21 09:26:09 +00:00
```
will output
```json
{
"cat": "meow"
}
```
## Encode json: anchors
Anchors are dereferenced
Given a sample.yml file of:
```yaml
cat: & ref meow
anotherCat: *ref
```
then
```bash
2022-01-27 06:21:10 +00:00
yq -o=json '.' sample.yml
2022-01-21 09:26:09 +00:00
```
will output
```json
{
"cat": "meow",
"anotherCat": "meow"
}
```
## Encode json: multiple results
Each matching node is converted into a json doc. This is best used with 0 indent (json document per line)
Given a sample.yml file of:
```yaml
things: [{stuff: cool}, {whatever: cat}]
```
then
```bash
2022-01-27 06:21:10 +00:00
yq -o=json -I=0 '.things[]' sample.yml
2022-01-21 09:26:09 +00:00
```
will output
```json
{"stuff":"cool"}
{"whatever":"cat"}
```