【问题标题】:Using JQ to convert an array of object to list of objects使用 JQ 将对象数组转换为对象列表
【发布时间】:2021-07-11 06:51:55
【问题描述】:

假设我有以下 JSON

[
 {
  name : "A",
  value : "1"
 },
 {
  name : "B",
  value : "5"
 },
 {
  name : "E",
  value : "8"
 }
]

我只是想成为这样的人

 {
  name : "A",
  value : "1"
 },
 {
  name : "B",
  value : "5"
 },
 {
  name : "E",
  value : "8"
 }

我使用了 jq 普通过滤器所以 jq'.[]',但是我得到了一个由返回分隔的对象列表:

 {
  name : "A",
  value : "1"
 }
 {
  name : "B",
  value : "5"
 }
 {
  name : "E",
  value : "8"
 }

请注意,对象之间的逗号神奇地消失了。仅当对象按名称索引时,使用 reduce 才有效,比如说,我使用了以下内容:

jq '将 .[] 减少为 $i ({}; .[$i.name] = $i)'

有人遇到过类似情况吗?

【问题讨论】:

    标签: arrays list jq comma


    【解决方案1】:

    所示的输入和所需的输出都不是有效的 JSON 或 JSON 流,因此这个问题似乎值得怀疑,因此提供了以下响应,并警告说可能应该避免它们。

    还应该注意的是,除了 sed-only 方法之外,这里提供的解决方案会生成逗号分隔的 JSON,这可能不是我们想要的。

    他们假设准 JSON 输入在文件 qjson.txt 中。

    1. 仅限 sed
        < qjson.txt sed -e '1d;$d; s/^ //'
    
    1. hjson、jq 和 sed
       < qjson.txt hjson -j | jq -r '.[] | (.,",")' | sed '$d'
    
    1. hjson 和 jq
        < qjson.txt hjson -j | jq -r '
            foreach .[] as $x (-1; .+1; 
              if . == 0 then $x else ",", $x end)'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      • 2022-10-07
      • 2023-01-24
      • 1970-01-01
      • 2017-07-14
      • 1970-01-01
      相关资源
      最近更新 更多