6

我正在尝试将 json 文件拆分为各种 json 文件。输入(r1.json)看起来像:

 {

    "results" : [

                {
            content 1
}
,
{
            content 2
}
,
{
            content n
}

    ]
}

我希望输出为 n 个文件:1.json、2.json、n.json。分别包含{content 1}、{content 2}和{content n}。

我试过了 :

for i in {0..24}; do cat r1.json | jq '.results[$i]' >> $i.json; done

但我有以下错误:错误:我没有定义

4

3 回答 3

7

虽然上述答案是正确的,但请注意,在 jq 脚本中插入 shell 变量对于除了最琐碎的脚本之外的所有脚本来说都是一个糟糕的主意。在提供的任何解决方案上,替换以下内容:

jq ".results[$i]"

具有以下内容:

jq --arg i "$i" '.results[$i | tonumber]'
于 2015-12-23T20:44:40.310 回答
5

尝试

for i in {0..24}; do cat r1.json | jq ".results[$i]" >> $i.json; done

请注意,shell 变量不能在单引号内展开。

IHTH

于 2015-12-23T00:51:58.073 回答
3

单引号可能是什么让你搞砸了。Bash 变量不在单引号中展开。您正在将文字字符串传递.results[$i]jq. 改用双引号:

for i in {0..24}; do
    cat r1.json | jq ".results[$i]" >> $i.json
done
于 2015-12-23T00:56:22.687 回答