Help us understand the problem. What is going on with this article?

整形済みJSON文字列を1行JSONに変換(圧縮)する

JSON文字列を1行JSONに変換(圧縮)する際に方法を確認したのでメモ。

方法

以下の2通りの方法を紹介する。

  • Python
  • jqコマンド

ファイルに記載された以下のようなJSON文字列を前提にする。

file.py
{
    "Records": [
        {
            "database": {
                "NewImage": {
                    "eventId": {
                        "S": "a4207f7a-5f04-471b-a338-1175182eaa6d"
                    },
                    "isCompleted": {
                        "BOOL": True
                    }
                },
                "OldImage": {
                    "eventId": {
                        "S": "a4207f7a-5f04-471b-a338-1175182eaa6d"
                    },
                    "isCompleted": {
                        "BOOL": False
                    }
                }
            }
        }
    ]
}

方法その1:Pythonを利用

$ python
>>> import json
>>> f = open("file.json")
>>> json.dumps(f.read()).replace("\\n","").replace("\\","").replace("    ", "")
'"{"Records": [{"database": {"NewImage": {"eventId": {"S": "a4207f7a-5f04-471b-a338-1175182eaa6d"},"isCompleted": {"BOOL": True}},"OldImage": {"eventId": {"S": "a4207f7a-5f04-471b-a338-1175182eaa6d"},"isCompleted": {"BOOL": False}}}}]}"'

.replace(" ", "")ではインデント(スペース4つ)を置換して削除している。JSON文字列中で異なる文字列をインデントとしている場合は本部分の置換元を変更すれば良い。

方法その2:jqコマンドを利用

基本的にはcat <ファイル名> | jq -cで対処可能である。

しかし、jqはTrueFalseをbooleanとして扱えないため、今回のfile.jsonに対してそのまま実行しようとすると下記のようなエラーとなる。

$ cat file.json | jq -c
parse error: Invalid numeric literal at line 11, column 0

よって、Truetrueへ、Falsefalseへ事前に変更する必要がある。事前にfile.jsonを手直しした場合は以下のように実行可能である。

$ cat file.json | jq -c
{"Records":[{"database":{"NewImage":{"eventId":{"S":"a4207f7a-5f04-471b-a338-1175182eaa6d"},"isCompleted":{"BOOL":true}},"OldImage":{"eventId":{"S":"a4207f7a-5f04-471b-a338-1175182eaa6d"},"isCompleted":{"BOOL":false}}}}]}

以上

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした