web-dev-qa-db-ja.com

jqで文字列をjsonに変換する

バックグラウンド

オブジェクト内にjsonの文字列を含むjsonファイルがあります。

{
    "requestType": "POST",
    "response": {
        "size": 78,
        "text": "{\"recordID\":123, \"title\":\"Hello World\", \"content\":\"Lorem ipsum...\"}"
    }
}

Jsonコマンドラインインターペッター jq を使用して、.response.text文字列の内容をjsonとして挿入する必要があります。

このコマンドを実行すると:

jq '.response.text | @json'

出力:"\"{\\\"recordID\\\":123, \\\"title\\\":\\\"Hello World\\\", \\\"content\\\":\\\"Lorem ipsum...\\\"}\""

Jsonの代わりに奇妙なエスケープされたjson文字列を取得します。これは.response.text | @json | .recordIDのようなものからアクセスできます。

@json関数はjsonを取得し、jsonエスケープ文字列を出力するため、別の方法が必要ですが、@textは何もしないようです。

質問

エスケープされたjsonの文字列を実際のjsonに変換する方法はありますか?jq '.response.text | @json | .title'などのコマンドを使用して解析し、この出力を取得します:"Hello World"

28
RJ-Adam

fromjson を使用します。

文字列を適切なJSON値に解析します。 tojson(および@json)は逆に、json値を取得して文字列に変換します。

だからあなたはこれを行うことができます:

.response.text | fromjson.title
37
Jeff Mercado