我有一个 Kubernetes Pod 的 json 文档,这是一个示例: https: //github.com/itaysk/kubectl-neat/blob/master/test/fixtures/pod-1-raw.json
我想遍历spec.containers[i].volumeMounts
并删除那些.name
以"default-token-"
. 请注意, 和containers
都是volumeMounts
数组。
使用 jq 我花了 1 分钟写了这 1 行:try del(.spec.containers[].volumeMounts[] | select(.name | startswith("default-token-")))
。我正在尝试用 Go 重写它。
在寻找一个好的 json 库时,我选择了 gjson/sjson。由于sjson 不支持数组访问器(#
语法),并且 gjson 不支持获取结果路径,因此我寻找解决方法。
我尝试过使用Result.Index
do delete 直接从字节切片中删除结果,并成功了,但是对于我编写的查询 ( spec.containers.#.volumeMounts.#(name%\"default-token-*\")|0
),索引始终为 0 (我尝试了它的不同变体,结果相同)。
所以目前我有一些 25 行代码,它们使用 gjson 来获取spec.containers.#.volumeMounts
和迭代它的结构并最终用于sjson.Delete
删除。它有效,但感觉比我预期的要复杂得多。
在 Go 中是否有更好的方法来做到这一点?如果需要的话我愿意切换 json 库。
编辑:我宁愿避免使用类型化模式,因为我可能需要在不同类型上执行此操作,对于某些类型我没有完整的模式。
(还删除了有关我当前实现的一些分散注意力的细节)
12345678_0001
慕容3067478
相关分类