简体   繁体   English

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

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

I would like in JQ to substitute the values in the first array with the names in the second array based on the key "size" while keeping the length of the first array unchanged.我想在 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\"}]
]

So the wanted result would look like this:所以想要的结果是这样的:

[{\"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}]

I used this input to obtain the above arrays jq "[.DATA.product.traits|([.colors.colorMap[]| {size:.sizes[]}]), ( [.sizes.sizeMap[]| {size:.id, name}])]" and then tried using if-then-else statement ( |if (.[0:-1][][].size ==.[-1][].size) then [.[-1][].name ] else null end" ) but I was unable to reach the desired output..我使用这个输入来获得上面的 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..

Given the input给定输入

[
  [
    {"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"}
  ]
]

you can generate an INDEX over the second item, and use it for reference in a map on the first您可以在第二个项目上生成一个INDEX ,并在第一个项目的map中使用它作为参考

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

to get要得到

[
  {"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"}
]

Demo演示

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

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