web-dev-qa-db-ja.com

sedでjson値を抽出する

Json結果があり、二重引用符なしで文字列を抽出したい

{"value1":5.0,"value2":2.5,"value3":"2019-10-24T15:26:00.000Z","modifier":[]}

この正規表現を使用すると、value3(019-10-24T15:26:00.000Z)を正しく抽出できます

sed -e 's/^.*"endTime":"\([^"]*\)".*$/\1/'

二重引用符のない文字列「value2」の結果を抽出するにはどうすればよいですか?

sedを使用する必要があるため、jqをインストールできません。それが私の問題です

4
Guif If

jq aコマンドラインJSONプロセスorを実行するだけです

$ json_data='{"value1":5.0,"value2":2.5,"value3":"2019-10-24T15:26:00.000Z","modifier":[]}'
$ jq '.value2' <(echo "$json_data")
2.5

キー.value2は、興味のある値にアクセスします。

このリンクは、なぜ[〜#〜]しない[〜#〜]の理由、jsonの解析に正規表現を使用するかをまとめたものです(XML/HTMLでも同じです)理論的には他のデータ構造は無限にネストすることができます)

単一キーを解析するための正規表現:JavaScriptのJSONからの値

jqがない場合:

次のGNU grepコマンドを使用できます。

$ echo '{"value1":5.0,"value2":2.5,"value3":"2019-10-24T15:26:00.000Z","modifier":[]}' | grep -zoP '"value2":\s*\K[^\s,]*(?=\s*,)'
2.5

ここで詳述されている正規表現を使用する:

"value2":\s*\K[^\s,]*(?=\s*,)

demo:https://regex101.com/r/82J6Cb/1/

これは、jsonが線形化されていない場合でも機能します!!!!

pythonを使用すると、非常に直接的でもあり、Python3でなくても、デフォルトでマシンにインストールされているはずです。

$ cat data.json 
{"value1":5.0,"value2":2.5,"value3":"2019-10-24T15:26:00.000Z","modifier":[]}
$ cat extract_value2.py 
import json

with open('data.json') as f:
    data = json.load(f)
    print(data["value2"])
$ python extract_value2.py 
2.5
0
Allan

データが「d」ファイルの場合は、gnu sedを試してください

sed -E 's/[{,]"\w+":([^,"]+)/\1\n/g ;s/(.*\n).*".*\n/\1/' d
0
user7712945