【发布时间】:2017-01-06 17:18:02
【问题描述】:
我需要从 json 字符串中打印键和值。我已经解析了一个简单的 json 字符串
{
"Name": "test1",
"CreateDate": "2016-08-30T10:52:52Z",
"Id": "testId1",
}
我的代码是这样的
q1=$(echo $x | grep -Po '"Name":.*?[^\\]",'| perl -pe 's/"Name": //; s/^"//; s/",$//');
q2=$(echo $x | grep -Po '"Id":.*?[^\\]",'| perl -pe 's/"Id": //; s/^"//; s/",$//');
echo $q1 "," $q2;
但此代码不适用于这样的json字符串
x='{ "TestNames":
[{
"Name": "test1",
"CreateDate": "2016-08-30T10:52:52Z",
"Id": "testId1"
},
{
"Name": "test2",
"CreateDate": "2016-08-30T10:52:13Z",
"Id": "testId2"
}]
}';
我需要这样打印
test1 , testId1
test2 , testId2
是否可以使用 grep 命令获取这样的数据?
【问题讨论】:
-
数据不是有效的 json。 json 解析器会说:
parse error: Expected another key-value pair at line 6, column 10(键值对后面的命令只有在它后面跟着另一个键/值对时才允许) -
既然每个人都建议你安装 3rd 方程序。如果你的 JSON 格式没有改变并且你的密钥是有限的,你需要一个 pure Bash+grep 解决方案,你可以@ 987654321@ 然后print them side by side。
-
@makadev 如果你的“JSON”格式没有改变并且你的密钥是有限的,你需要一个纯 Bash+grep 解决方案 ...你做错了。
-
@hek2mgl 为什么,因为给出了另一种解决方案?您确实注意到您的“重复”接受的答案建议安装 js/json 解析器,许多其他的也是如此。这在某些环境中可能不是一个选项。如果这是一个好的解决方案,我不会在 cmets 中编写它。此外,没有人注意到 perl 的用法。为什么不使用 perls JSON 模块...
-
如果您的应用程序需要处理 json,而您的服务器上没有任何东西可以解析 json 并且您无法安装某些东西,那么您做错了。