用sed提取json值

Posted

tags:

篇首语:本文由小常识网(cha138.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。那是我的问题

答案

只需运行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
另一答案

使用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

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

另一答案

如果你的数据在'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

以上是关于用sed提取json值的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 字符串从片段传递到适配器的问题

使用sed提取QueryString值

什么时间用正则表达式什么时间用json提取器

jmeter如何采用json提取器提取多个值

jmeter 用一个正则提取器提取多个值的两种方法

如何使用 sed/aws 从 json 文件中获取值?