Skip to content

JSON や XML を整形して表示する

JSON や XML を整形して表示出来るツールをまとめます。

  • JSON の整形
    1. Python の標準ライブラリを使う
    2. 軽量 JSON パーサー「jq」を使う
  • XML の整形
    1. xmllint を使う
    2. tidy を使う
    3. xmlstarlet を使う

JSON を整形する

サンプルファイル

1
2
3
4
5
{ "fruits": { "fruit": [
{ "item": "Apple", "price": "100" },
{ "item": "Banana", "price": "200" },
{ "item": "Cherry", "price": "300" }
] } }

Python の標準ライブラリを使う

Python の標準ライブラリを使って JSON を整形することが出来ます。デフォルトで Python がインストールされている環境は多いでしょうから、「事前準備が必要無く、手軽」というメリットがあります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# cat fruits.json | python -m json.tool
{
    "fruits": {
        "fruit": [
            {
                "item": "Apple",
                "price": "100"
            },
            {
                "item": "Banana",
                "price": "200"
            },
            {
                "item": "Cherry",
                "price": "300"
            }
        ]
    }
}

軽量 JSON パーサー「jq」を使う

JSON パーサーである「jq」を使うことも出来ます。CentOS であれば yum でインストールします。

1
yum -y install jq

Ubuntu であれば apt-get でインストールします。

1
apt-get -y install jq

実行例は以下の通りです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# cat fruits.json | jq .
{
  "fruits": {
    "fruit": [
      {
        "price": "100",
        "item": "Apple"
      },
      {
        "price": "200",
        "item": "Banana"
      },
      {
        "price": "300",
        "item": "Cherry"
      }
    ]
  }
}

特定の要素だけを取得することも出来、非常に高機能です。

1
2
3
4
# cat fruits.json | jq .fruits.fruit[].item
"Apple"
"Banana"
"Cherry"

XML を整形する

サンプルファイル

1
2
3
4
5
6
<?xml version="1.0" encoding="UTF-8"?>
<fruits>
<fruit><item>Apple</item><price>100</price></fruit>
<fruit><item>Banana</item><price>200</price></fruit>
<fruit><item>Cherry</item><price>300</price></fruit>
</fruits>

xmllint を使う

XML は xmllint を使って整形することが出来ます。私の CentOS 環境にはインストール済みでした。Ubuntu であれば apt-get でインストールします。

1
apt-get -y install libxml2-utils

実行例は以下の通りです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# xmllint --format fruits.xml
<?xml version="1.0" encoding="UTF-8"?>
<fruits>
  <fruit>
    <item>Apple</item>
    <price>100</price>
  </fruit>
  <fruit>
    <item>Banana</item>
    <price>200</price>
  </fruit>
  <fruit>
    <item>Cherry</item>
    <price>300</price>
  </fruit>
</fruits>

tidy を使う

tidy を使うことも出来ます。CentOS であれば yum でインストールします。

1
yum -y install tidy

Ubuntu であれば apt-get でインストールします。

1
apt-get -y install tidy

実行例は以下の通りです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# tidy --indent-cdata true -xml -utf8 -i fruits.xml
No warnings or errors were found.

<?xml version="1.0" encoding="utf-8"?>
<fruits>
  <fruit>
    <item>Apple</item>
    <price>100</price>
  </fruit>
  <fruit>
    <item>Banana</item>
    <price>200</price>
  </fruit>
  <fruit>
    <item>Cherry</item>
    <price>300</price>
  </fruit>
</fruits>

xmlstarlet を使う

xmlstarlet を使うことも出来ます。CentOS であれば yum でインストールします。

1
yum -y install xmlstarlet

Ubuntu であれば apt-get でインストールします。

1
apt-get -y install xmlstarlet

実行例は以下の通りです。fo は「format」を省略したオプションです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# xmlstarlet fo fruits.xml
<?xml version="1.0" encoding="UTF-8"?>
<fruits>
  <fruit>
    <item>Apple</item>
    <price>100</price>
  </fruit>
  <fruit>
    <item>Banana</item>
    <price>200</price>
  </fruit>
  <fruit>
    <item>Cherry</item>
    <price>300</price>
  </fruit>
</fruits>