用sed提取json值

问题描述 投票:3回答:3

我有一个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。那是我的问题

json regex sed
3个回答
1
投票

只需运行jq命令行JSON处理器

$ 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和理论上可以无限嵌套的其他数据结构也是如此)

Regex for parsing single key: values out of JSON in Javascript

如果您没有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*,)

但是:ぁzxswい

如果json没有线性化,这甚至可以工作!

使用https://regex101.com/r/82J6Cb/1/它也非常直接,你应该默认安装在你的机器上,即使它不是python3它应该工作

python

3
投票

使用GNU sed for $ 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 启用ERE:

-E

任何POSIX sed:

$ sed -E 's/.*"value3":"?([^,"]*)"?.*/\1/' file
2019-10-24T15:26:00.000Z

$ sed -E 's/.*"value2":"?([^,"]*)"?.*/\1/' file
2.5

以上假设您从未在引用的字符串中使用逗号。


0
投票

如果你的数据在'd'文件中,请尝试gnu sed

$ sed 's/.*"value3":"\{0,1\}\([^,"]*"\{0,1\}.*/\1/' file
2019-10-24T15:26:00.000Z

$ sed 's/.*"value2":"\{0,1\}\([^,"]*"\{0,1\}.*/\1/' file
2.5
© www.soinside.com 2019 - 2024. All rights reserved.