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をインストールできません。それが私の問題です
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でも同じです)理論的には他のデータ構造は無限にネストすることができます)
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
データが「d」ファイルの場合は、gnu sedを試してください
sed -E 's/[{,]"\w+":([^,"]+)/\1\n/g ;s/(.*\n).*".*\n/\1/' d