如何在bash中使用jq迭代JSON内容

时间:2019-07-06 21:41:44

标签: bash jq

我有一个如下的json内容,

{
"Id": "Role1",
"Result": [
    {
        "Sub1": 1,
        "Sub2": 1,
        "StrSub": "ABC"
    },
    {
        "Sub1": 2,
        "Sub2": 1,
        "StrSub": "CDE"
    } ],
"Other": "NA"
}

我正在尝试按以下方式打印,

Id
Result
Others

我可以通过使用jq length t1.json来获取长度,但是使用该长度,我尝试在for循环中使用--arg index 0来迭代json文件,但这是行不通的(jq --arg id 0 '.[$id]' t1.json

2 个答案:

答案 0 :(得分:2)

假设输入已更正:

$ jq -r 'keys_unsorted[]' t1.json
Id
Result
Other

jq --arg id 0 '.[$id]' t1.json不起作用的原因是您已将$id指定为JSON字符串。

传递整数参数的最简单方法是使用--argjson而不是--arg。许多替代方法之一是使用$id|tonumber而不是$id

答案 1 :(得分:0)

使用步行路径Unix实用程序 jtc

bash $ <t1.json jtc -w'[:]><k' 
"Id"
"Other"
"Result"
bash $ 

如果要删除引号,请添加-qq

PS>披露:我是jtc-用于JSON操作的shell cli工具的创建者