gpt4 book ai didi

json - Go - 即时修改 JSON

转载 作者:数据小太阳 更新时间:2023-10-29 03:28:33 30 4
gpt4 key购买 nike

考虑以下输入:

"object": {
"array": [
{
"element_field_1": some_value_1,
"element_field_2": some_value_1,
... // More unknown fields
},
...
],
"object_field": foo,
... // Some more unknown fields
}

我需要遍历数组的每个元素,修改字段 1 和 2,然后输出 JSON 对象。这是我现在拥有的,但它远不是有效的 Go 代码:

func handler(w http.ResponseWriter, r *http.Request) {
// Transform the request's body to an interface
j := getDecodedJSON(r)

// Iterate over every element of the array
for i := 0; i < len(j["object"]["array"]); i++ {
rewrite(j["object"]["array"][i])
}

// Encoding back to JSON shouldn't be a problem
}

func getDecodedJSON(r *http.Request) map[string]interface{} {
dec := json.NewDecoder(r.Body)
var j map[string]interface{}
if err := dec.Decode(&j); err != nil {
log.Fatal(err)
}
return j
}

func rewrite(element *map[string]interface{}) {
element["element_field_1"], element["element_field_2"] = lookupValues(element)
}

基本上错误是:

invalid operation: j["object"]["array"] \
(type interface {} does not support indexing)

当然,我的方法存在更多概念性错误。

编写详细说明输入内容的 struct 并不是一个真正的选择,因为我事先不知道 JSON 键。

我怎样才能做到这一点“Go 方式”?

编辑:这是实际用例:

  • 我有两个网络服务,它们之间需要一个“翻译器”。
  • 服务 1 向翻译器发出请求,其中修改了几个字段,其他所有内容都保持不变。
  • 然后翻译器采用修改后的 JSON 并将请求复制到服务 2。

换句话说,这个翻译器在这两种服务中扮演着中间人的角色。鉴于其快速启动时间和快速 JSON 处理,Go 似乎是一个不错的选择。

我认为详细说明 Go 结构中的每个 JSON 字段没有意义,因为我只需要更改几个字段。由于反射(解析到 map[string]interface{} 应该比使用完整的结构慢),我愿意在效率上做出权衡,以换取使代码更通用于 JSON 输入的变体。

最佳答案

改变

j["object"]["array"][i]

j["object"].(map[string]interface{})["array"].([]interface{})[i]

关于json - Go - 即时修改 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30492568/

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