13

オブジェクトのオブジェクトである大きな JSON ファイルがあり、オブジェクト キーの後に個別のファイル名に分割したいと考えています。jq またはその他の市販のツールを使用してこれを達成することは可能ですか?

元の JSON は次の形式です。

{ "item1": {...}, "item2": {...}, ...}

この入力を考慮して、item1.json、item2.json などのファイルを生成したいと思います。

4

3 に答える 3

15

これで始められるはずです:

for f in `cat input.json | jq -r 'keys[]'` ; do
  cat input.json | jq ".$f" > $f.json
done

または、一部の人が好むように、よりばかげた構文を主張する場合:

for f in $(jq -r 'keys[]') ; do
  jq ".[\"$f\"]" < input.json > "$f.json"
done < input.json
于 2015-02-26T21:47:34.007 に答える
8

jq を 1 回呼び出すだけで済むソリューションを次に示します。

jq -cr 'keys[] as $k | "\($k)\n\(.[$k])"' input.json |
  while read -r key ; do
    read -r item
    printf "%s\n" "$item" > "/tmp/$key.json"
  done

jq コマンドの出力を awk にパイプする方が速い場合があります。次に例を示します。

jq -cr 'keys[] as $k | "\($k)\t\(.[$k])"' input.json |
  awk -F\\t '{ print $2 > "/tmp/" $1 ".json" }'

もちろん、キー名にファイル名に使用できない文字が含まれている場合は、これらのアプローチを変更する必要があります。

于 2017-01-06T10:20:13.150 に答える