我有一个以下格式的json文件,如果errorCode为1,我想编写一个bash脚本来对id执行操作。
如果errorCode为1,则对id执行操作,否则不执行任何操作
[{
"endTime": null,
"errorCode": 1,
"id": 219759099,
},
{
"endTime": null,
"errorCode": 0,
"id": 219759100,
},
{
"endTime": null,
"errorCode": 0,
"id": 219759101,
}]
答案 0 :(得分:1)
我会使用具有JSON
解析器的python
语言。提供有效的JSON
文件,例如:
[
{
"endTime": null,
"errorCode": 1,
"id": 219759099
},
{
"endTime": null,
"errorCode": 0,
"id": 219759100
},
{
"endTime": null,
"errorCode": 0,
"id": 219759101
}
]
您可以使用以下脚本:
#!/usr/bin/env python
import sys
import json
try:
json_data=open(sys.argv[1])
except IndexError:
sys.stderr.write("Please provide a JSON file.\n")
sys.exit(1)
data = json.load(json_data)
for d in data:
if d["errorCode"] == 1:
print d["id"]
将其保存到文件中并使其可执行并运行如下:
$ ./get_ids.py file
219759099
您可以将其传输到operation
命令或扩展脚本以执行操作。
答案 1 :(得分:0)
这样可以解决问题:
parity=0
for val in $(grep -E "errorCode|id" x.json|grep -Eo [0-9]+)
do
if [ $parity -eq 0 ]
then
if [ $val -eq 1 ]
then
parity=1
fi
else
echo "id $val is erroneous"
parity=0
fi
done
其中x.json是jason文件。根据您的要求,使用合适的语句替换包含 echo 命令的行。例如,如果要将id附加到错误日志,请尝试:
echo $val >> erroneousIDs.log
注意:我认为字段的顺序总是一样的。
答案 2 :(得分:0)
您可能需要查看 this 以获得更强大的方法。它使用sed和awk来解析JSON。
答案 3 :(得分:0)
使用awk:
awk -F '[ ":,]+' '$2=="errorCode" && $3==1{err=1} err && $2=="id"{print $3; err=0}' f.json
<强>输出:强>
219759099
虽然我必须提醒一点,使用shell解析JSON不是解析JSON的最佳方式,如果JSON文件的格式发生变化,它也可能容易出错。