将输出合并为单个哈希/字典JQ

时间:2018-09-28 02:24:41

标签: json dictionary jq

所以我有一个看起来像这样的json对象:

File fi = new File("/webapp/src/main/webapp/resources/pics/default.jpg");
byte[] fileContent = Files.readAllBytes(fi.toPath());
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_JPEG);
return new ResponseEntity<byte[]>(fileContent, headers, HttpStatus.OK);

然后我可以将以下jq规则[{ "size": "77824", "module": "rfcomm", "depcount": "4", "deps": [] }, { "size": "98304", "module": "scsi_transport_iscsi", "depcount": "4", "deps": [] }, { "size": "16384", "module": "xt_conntrack", "depcount": "1", "deps": ["nouveau", "i915"] }] 用于一系列看起来像这样的对象

.[] | { (.module) : (.deps | join(",")) }

我已经添加了jq play example的内容。

我希望它获得将这些对象组合在一起的输出。像这样:

{
  "rfcomm": ""
}
{
  "scsi_transport_iscsi": ""
}
{
  "xt_conntrack": "nouveau,i915"
}

我是个jq新手,所以我确定有一种方法,我只是不知道该怎么做。

2 个答案:

答案 0 :(得分:0)

一种可能性:

[.[] | { (.module) : (.deps | join(",")) }] | add

答案 1 :(得分:0)

另一种可能性(某种功能性方法):

reduce .[] as $elem ({}; . + { ($elem.module): $elem.deps | join(",") })

一般语法为:

reduce inputs as $elem (INIT; REDUCER)
  • INIT的输出变量初始值可以是[]{}
  • 在每个元素REDUCER上执行的
  • . +代码确保将其附加到中间结果(输出)上