繁体   English   中英

JQ 根据来自不同数组的值替换一个数组中的值

[英]JQ substitute values in one array based on values from different array

我想在 JQ 中根据键“大小”将第一个数组中的值替换为第二个数组中的名称,同时保持第一个数组的长度不变。

[
    [{\"size\":0},{\"size\":1},{\"size\":2},{\"size\":3},{\"size\":4},{\"size\":5},{\"size\":6},{\"size\":7},{\"size\":8},{\"size\":9},{\"size\":0},{\"size\":1},{\"size\":2},{\"size\":3},{\"size\":4},{\"size\":5},{\"size\":6},{\"size\":7},{\"size\":8},{\"size\":0},{\"size\":1},{\"size\":2},{\"size\":3},{\"size\":4},{\"size\":5},{\"size\":6},{\"size\":7},{\"size\":8}]
    
    [{\"size\":0,\"name\":\"6M\"},{\"size\":1,\"name\":\"6.5M\"},{\"size\":2,\"name\":\"7M\"},{\"size\":3,\"name\":\"7.5M\"},{\"size\":4,\"name\":\"8M\"},{\"size\":5,\"name\":\"8.5M\"},{\"size\":6,\"name\":\"9M\"},{\"size\":7,\"name\":\"9.5M\"},{\"size\":8,\"name\":\"10M\"},{\"size\":9,\"name\":\"11M\"}]
]

所以想要的结果是这样的:

[{\"size\":6M},{\"size\":6.5M},{\"size\":7M},{\"size\":7.5M},{\"size\":8M},{\"size\":8.5M},{\"size\":9M},{\"size\":9.5M},{\"size\":10M},{\"size\":11M},{\"size\":6M},{\"size\":6.5M},{\"size\":7M},{\"size\":7.5M},{\"size\":8M},{\"size\":8.5M},{\"size\":9M},{\"size\":9.5M},{\"size\":10M},{\"size\":6M},{\"size\":6.5M},{\"size\":7M},{\"size\":7.5M},{\"size\":8M},{\"size\":8.5M},{\"size\":9M},{\"size\":9.5M},{\"size\":10M}]

我使用这个输入来获得上面的 arrays jq "[.DATA.product.traits|([.colors.colorMap[]| {size:.sizes[]}]), ( [.sizes.sizeMap[]| {size:.id, name}])]"然后尝试使用 if-then-else 语句( |if (.[0:-1][][].size ==.[-1][].size) then [.[-1][].name ] else null end" ) 但我无法达到所需的 output..

给定输入

[
  [
    {"size":0}, {"size":1}, {"size":2}, {"size":3}, {"size":4},
    {"size":5}, {"size":6}, {"size":7}, {"size":8}, {"size":9},
    {"size":0}, {"size":1}, {"size":2}, {"size":3}, {"size":4},
    {"size":5}, {"size":6}, {"size":7}, {"size":8}, {"size":0},
    {"size":1}, {"size":2}, {"size":3}, {"size":4}, {"size":5},
    {"size":6}, {"size":7}, {"size":8}
  ],
  [
    {"size":0,"name":"6M"}, {"size":1,"name":"6.5M"},
    {"size":2,"name":"7M"}, {"size":3,"name":"7.5M"},
    {"size":4,"name":"8M"}, {"size":5,"name":"8.5M"},
    {"size":6,"name":"9M"}, {"size":7,"name":"9.5M"},
    {"size":8,"name":"10M"}, {"size":9,"name":"11M"}
  ]
]

您可以在第二个项目上生成一个INDEX ,并在第一个项目的map中使用它作为参考

(.[1] | INDEX(.size)) as $map | .[0] | map($map[.size | tostring])

要得到

[
  {"size":0,"name":"6M"}, {"size":1,"name":"6.5M"},
  {"size":2,"name":"7M"}, {"size":3,"name":"7.5M"},
  {"size":4,"name":"8M"}, {"size":5,"name":"8.5M"},
  {"size":6,"name":"9M"}, {"size":7,"name":"9.5M"},
  {"size":8,"name":"10M"}, {"size":9,"name":"11M"},
  {"size":0,"name":"6M"}, {"size":1,"name":"6.5M"},
  {"size":2,"name":"7M"}, {"size":3,"name":"7.5M"},
  {"size":4,"name":"8M"}, {"size":5,"name":"8.5M"},
  {"size":6,"name":"9M"}, {"size":7,"name":"9.5M"},
  {"size":8,"name":"10M"}, {"size":0,"name":"6M"},
  {"size":1,"name":"6.5M"}, {"size":2,"name":"7M"},
  {"size":3,"name":"7.5M"}, {"size":4,"name":"8M"},
  {"size":5,"name":"8.5M"}, {"size":6,"name":"9M"},
  {"size":7,"name":"9.5M"}, {"size":8,"name":"10M"}
]

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM