在Bash中查找目录中的所有JSON文件并将其合并为一个数组

3
我想在特定目录中找到所有的json文件并将它们组合成一个包含所有结果数据的父级结果。
我正在尝试这样做。
 find .  -name *data.json | tee result.json

它正在查找所有数据,但会将其路径保存在result.json中,如何获取所有文件中的数据并获得所有结果的组合JSON?
此命令将保存一个名为result.json的文件,其内容如下:
./17-10-2018/ghatkopar/17-18/data.json
./17-10-2018/ghatkopar/18-19/data.json
./17-10-2018/ghatkopar/10-11/data.json
./17-10-2018/ghatkopar/11-12/data.json
./17-10-2018/ghatkopar/15-16/data.json
./17-10-2018/ghatkopar/19-20/data.json
./17-10-2018/ghatkopar/14-15/data.json
./17-10-2018/ghatkopar/12-13/data.json
./17-10-2018/ghatkopar/20-21/data.json
./17-10-2018/mulund-west/16-17/data.json
./17-10-2018/mulund-west/21-22/data.json
./17-10-2018/mulund-west/13-14/data.json
./17-10-2018/mulund-west/data.json
./17-10-2018/mulund-west/17-18/data.json
./17-10-2018/mulund-west/18-19/data.json
./17-10-2018/mulund-west/10-11/data.json
./17-10-2018/mulund-west/11-12/data.json
./17-10-2018/mulund-west/15-16/data.json
./17-10-2018/mulund-west/19-20/data.json
./17-10-2018/mulund-west/14-15/data.json
./17-10-2018/mulund-west/12-13/data.json
./17-10-2018/mulund-west/20-21/data.json
./17-10-2018/bhandup/16-17/data.json
./17-10-2018/bhandup/21-22/data.json
./17-10-2018/bhandup/13-14/data.json
./17-10-2018/bhandup/data.json
./17-10-2018/bhandup/17-18/data.json
./17-10-2018/bhandup/18-19/data.json
./17-10-2018/bhandup/10-11/data.json
./17-10-2018/bhandup/11-12/data.json
./17-10-2018/bhandup/15-16/data.json

我不清楚你想让 result.json 包含什么内容;有许多不同的方法可以将多个 JSON 值组合成单个值。你只是想将它们包装在一个数组中吗? - ruakh
是的,我想把它包装成数组。 - Anurag Mishra
你能不能把find的结果直接保存到一个数组里呢? - RoadRunner
2个回答

1
你需要对每个文件进行cat操作,而不是输出它的名称。你还需要在除第一个json外的每个json前输出逗号,并将其包含在方括号中:
#! /bin/bash
printf [
separator=""
find . -name '*data.json' -print0 | while IFS= read -d '' -r j ; do
    printf $separator
    separator=,
    cat "$j"
done
printf ]

0

该命令将在当前和子文件夹中搜索所有data*.json文件,并将它们合并为一个results.json(数组)

find . -name data\*.json -type f | xargs cat | sed -e s/}/},/g -e \$s/,\$/]/ -e 1s/^/[/ > results.json

我已经使用以下命令进行了基本测试

echo {\"name\":\"Alex\", age:24, city:\"Tokyo\"} > sample.json

for i in {1..10} ; do cp sample.json data$i.json ; done

find . -name data\*.json -type f | xargs cat | sed -e s/}/},/g -e \$s/,\$/]/ -e 1s/^/[/ > results.json

如果您发现它对于特定情况不起作用,我会尝试修复它。但目前它无法处理嵌套的JSON或带有数组的JSON。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接