我想在bash中从http://freifunk.in-kiel.de/alfred.json读取json文件,并将其分成由该json字符串中每个元素的hostname命名的文件。
如何用bash阅读json?
答案 0 :(得分:2)
如何用bash阅读json?
您可以使用jq
。您要做的第一件事是提取主机名列表并将其保存到bash数组中。在该数组上运行循环,然后再次运行每个主机名的查询,根据它们提取每个元素,并通过重定向保存数据,文件名也基于它们。
答案 1 :(得分:2)
最简单的方法是使用jq
的两个实例 - 一个列出主机名,另一个(在循环内)提取单个条目。
唉,这有点效率低下(因为这意味着要从每个记录中重新读取文件以提取)。
while read -r hostname; do
[[ $hostname = */* ]] && continue # paranoia; see comments
jq --arg hostname "$hostname" \
'.[] | select(.hostname == $hostname)' <alfred.json >"out-${hostname}.json"
done < <(jq -r '.[] | .hostname' <alfred.json)
(如果out-
包含名为alfred.json
的主机的条目,则alfred
前缀会阻止{{1}}被覆盖。
答案 2 :(得分:1)
你可以像(我没有检查过)一样使用python one-liner:
curl -s http://freifunk.in-kiel.de/alfred.json | python -c '
import json, sys
tbl=json.load(sys.stdin)
for t in tbl:
with open(tbl[t]["hostname"], "wb") as fp:
json.dump(tbl[t], fp)
'