用bash读取一个json文件

时间:2014-07-29 22:29:53

标签: json bash

我想在bash中从http://freifunk.in-kiel.de/alfred.json读取json文件,并将其分成由该json字符串中每个元素的hostname命名的文件。

如何用bash阅读json?

3 个答案:

答案 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)
'