我有Json文件,我试图使用下面的解析它
#!/bin/ksh
while read rec
do
while read line
do
firstname=`echo $line | sed -n -e 's/^.*\(full-name\)/\1/p' | cut -f3 -d'"'`
id=`echo $line | sed -n -e 's/^.*\(id\)/\1/p' | cut -f3 -d'"'`
echo "${firstname}'|'${id}"
done < `echo $rec | nawk 'gsub("}}}}", "\n")' | sed 's/{"results"//g'`
done < /var/tmp/Cloud_test.txt
我的示例文件是:
{"results":[{"general-info":{"full-name":"TELOS管理,"body":{"party":{"xrefs":{"xref":{"id":"66666"}}}}},"_id":"91002551"},{"_id":"222222","body":{"party":{"general-info":{"full-name":"DO重用},“xref”:{“xref”:{“id”:“777777”}
预期结果:
TELOS管理66666
请重复使用x 777777
在传递参数时,我在内部面临问题。它不会一行行地通过。其通过的完整行和结果并不像预期的那样出现。请帮忙把它修好。
发布于 2018-04-27 04:45:59
这是一个更复杂(双)的情况的这个问题。
以下几点对我来说是可行的:
cat sample.json | sed -e 's/"full-name"/\n&/g' | tail -n+2 | sed -e 's/"full-name":"\([^"]*\).*{"id":"\([^"]*\).*/\1\|\2/'
发布于 2018-04-27 07:24:57
正如@10b0所指出的那样,这种问题最好使用JSON感知工具(如jq )来解决。因此,这里是一个jq解决方案。
但是,必须指出的是,样本输入异常不规则,因此要求不那么清楚。如果JSON更有规律,那么jq解决方案就会更简单。
在任何情况下,以下jq过滤器都会产生所描述的结果:
.results[]
| ..
| objects
| select(has("general-info"))
| [(.["general-info"]|.["full-name"]), (.. | .id? // empty)]
| join("|")
简化
以上第二行可简化为:
[."general-info"."full-name", (.. | .id? // empty)]
https://stackoverflow.com/questions/50054547
复制相似问题