json - 如何用各种数组解析json

标签 json jq

我有一个 json 文件,如下所示:

[
  {
    "id": "aaa",
    "idMembers": [
      "David",
      "Mary"
    ],
    "actions": [
      {
        "id": "1",
        "date": "2019-08-28"
      },
      {
        "id": "2",
        "date": "2019-08-29"
      },
      {
        "id": "3",
        "date": "2019-08-30"
      }
    ]
  },
  {
    "id": "bbb",
    "idMembers": [
      "Mar",
      "Alex"
    ],
    "actions": [
      {
        "id": "1",
        "date": "2019-07-28"
      },
      {
        "id": "2",
        "date": "2019-07-29"
      }
    ]
  }
]

我想获得如下结果:

["David", "Mary", "1", "2019-08-28"]
["David", "Mary", "2", "2019-08-29"]
["David", "Mary", "3", "2019-08-30"]
["Mar", "Alex", "1", "2019-07-28"]
["Mar", "Alex", "2", "2019-07-29"]

我尝试过:

jq -c '.[] | [ .idMembers[], .actions[].id, .actions[].date] '

但结果是:

["David", "Mary", "1", "2", "3", "2019-08-28", "2019-08-29", "2019-08-30"]
["Mar", "Alex", "1", "2", "2019-07-28", "2019-07-29"]

我想做一些类似的事情:

jq -c '.[] | .idMembers[], .actions[] | [ .id, .date] '

但它返回了我

jq:错误(位于:1268):无法使用字符串“id”索引字符串

可以做类似的事情吗?

jq -c '.[] | .actions[] | [.idMembers[], .id, .date] '

最佳答案

actions 下的每个对象创建一个数组,并将其添加到 idMembers 中。

.[] | .idMembers + (.actions[] | map(.))

map(.) 也可以写成 [.[]]。为了澄清起见,上面的内容与:

.[] | .idMembers + (.actions[0] | map(.)),
      .idMembers + (.actions[1] | map(.)),
      .idMembers + (.actions[2] | map(.)),
                            ...
      .idMembers + (.actions[n] | map(.))

其中 nactions 中的元素数量。

关于json - 如何用各种数组解析json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57840933/

相关文章:

javascript - 使用变量创建 json 对象

bash - jq 错误 “object is not valid in a csv row”

json - 如何使用 jq 命令向 JSON 对象添加字段?

json - 如何在jq walk中引用父对象?

json - 如何使用 jq 进行 pretty-print ,以便多个值在同一行上?

javascript - 使用 javascript 和 Ajax POST 形成 JSON [LARAVEL]

java - 使用 Gson 反序列化映射键需要一个对象

java - 使用 GSON 和 Java 的完整 RESTFUL WebService

javascript - Vue.js - 显示 JSON 结果无法正常工作

json - 如何循环来自bash脚本的json键结果