1

我一直在修补 JQ 以尝试操纵一些数据。到目前为止,使用我的命令的以下 JSON 输出:

 map({Row: .[] })
|   map(select(.Row.ganjalord.latitude | test("SOME_TESTING_CONDITION")?))

输入:

[
  {
    "Row": {
      "ganjalord": {
        "latitude": "56.237480",
        "temp": 44
      }
    },
    "fighter": "1"
  },
  {
    "Row": {
      "ganjalord": {
        "latitude": "53.237480",
        "temp": 42
      }
    },
    "fighter": "0"
  }
]

我如何实现不按行嵌套的示例输出?

样本输出:

[
  {
    "ganjalord": {
      "latitude": "56.237480",
      "temp": 44
    },
    "fighter": "1"
  },
  {
    "ganjalord": {
      "latitude": "53.237480",
      "temp": 42
    },
    "fighter": "0"
  }
]

我是否使用简单的选择语句来尝试实现这一目标?

4

2 回答 2

2

给定两个字典的*运算符合并它们的内容。因此,

jq '[.[] | (. * .Row) | del(.Row)]'

...在给定输入时作为输出发出:

[
  {
    "fighter": "1",
    "ganjalord": {
      "latitude": "56.237480",
      "temp": 44
    }
  },
  {
    "fighter": "0",
    "ganjalord": {
      "latitude": "53.237480",
      "temp": 42
    }
  }
]
于 2018-06-20T16:14:56.563 回答
0

如图所示,将以下过滤器应用于“输入”,会产生所需的结果:

map( with_entries( if .key == "Row" then .value|to_entries[] else . end) )

理解这一点的关键是with_entries首先应用于to_entriesyield 键/值对,然后再应用于from_entries.

当然,与基于. * .Rowor . * Row(或.+.Rowor .Row+.)的解决方案一样,如果任何提升的键名与顶级键名一致,上述解决方案将导致一些数据丢失。

于 2018-06-20T17:00:13.237 回答