gpt4 book ai didi

json - 如何使用jq在JSON对象中的指定键后插入键值对?

转载 作者:行者123 更新时间:2023-12-02 02:10:47 25 4
gpt4 key购买 nike

我有一个像这样的 JSON 文件

{
"hierarchy": {
"structure": {
"card_11001": [
"addCard_4111"
],
"container_11006": [
"mainContainer_11007",
"subContainer_10016"
],
"mainContainer_11007": [
"paymentMethodList_10001"
],
"orderWrap_10012": [
"orderSummary_10005"
],
"paymentMethodList_10001": [
"card_11001",
"placeOrder_10013"
],
"root_10000": [
"payNotice_11011",
"payNotice_10020",
"container_11006",
"placeOrderResultAction_10004"
],
"subContainer_10016": [
"orderWrap_10012",
"footer_10014"
]
}
}
}

我想插入

"offline_11018": [
"instruction_908",
"checkboxList_11019"
]

“mainContainer_11007”“orderWrap_10012”之间,所以我想要的结果应该如下所示:

{
"hierarchy": {
"structure": {
"card_11001": [
"addCard_4111"
],
"container_11006": [
"mainContainer_11007",
"subContainer_10016"
],
"mainContainer_11007": [
"paymentMethodList_10001"
],
"offline_11018": [
"instruction_908",
"checkboxList_11019"
],
"orderWrap_10012": [
"orderSummary_10005"
],
"paymentMethodList_10001": [
"card_11001",
"placeOrder_10013"
],
"root_10000": [
"payNotice_11011",
"payNotice_10020",
"container_11006",
"placeOrderResultAction_10004"
],
"subContainer_10016": [
"orderWrap_10012",
"footer_10014"
]
}
}
}

我所知道的是我只能使用

将其附加到文件末尾
jq --raw-output '.hierarchy.structure + {"offline_11018": ["instruction_908","checkboxList_11019"]}'

但这不是我想要的,我想将它插入到另外两个键之间。我该如何使用 jq 命令来做到这一点?

最佳答案

最简单的方法是使用 to_entries.hierarchy.struct 转换为数组,执行插入,然后使用 from_entries重构对象,按照以下方式:

.hierarchy.structure |= (to_entries
| ... as $ix
| .[:$ix] + ($x | to_entries) + .[$ix:]
| from_entries)

如果可能找不到定义插入点的项目,当然需要修改上面的草图。

indexof/1

这里有一个有用的“def”,用于查找满足某些条件的最小索引:

# If the input is an array, emit the least index, $i, 
# for which `.[$i]|f` is truthy, otherwise emit null.
# Works similarly if the input is a JSON object.
def indexof(f):
label $out
| foreach .[] as $x (null; .+1;
if ($x|f) then (.-1, break $out) else empty end) // null;

使用indexof的解决方案

将以上部分放在一起:

{"offline_11018": [ "instruction_908", "checkboxList_11019" ]} as $x
| .hierarchy.structure |= (to_entries
| (1 + indexof( .value | index("mainContainer_11007") )) as $ix
| .[:$ix] + ($x | to_entries) + .[$ix:]
| from_entries)

关于json - 如何使用jq在JSON对象中的指定键后插入键值对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49589613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com