gpt4 book ai didi

json - 在 Go 中维护未解析的 JSON 字段的最佳方法是什么?

转载 作者:IT老高 更新时间:2023-10-28 13:10:35 24 4
gpt4 key购买 nike

我想将 JSON blob 解码为 Go 结构,对其进行操作,然后将其编码回 JSON。但是,JSON 中有一些与我的结构无关的动态字段,我想在序列化回 JSON 时维护它们。

例如:

{ "name": "Joe Smith", 
"age": 42,
"phone": "614-555-1212",
"debug": True,
"codeword": "wolf" }

type Person struct {
Name string
Age uint
Phone string
}

var p Person
json.Unmarshal(data, &p)
// Happy birthday
p.Age++
data, _ = json.Marshal(p)

// Any way to maintain the "debug" and "codeword" fields -- which might not
// be known ahead of time?

我知道一种可能性是将所有内容解码为 map[string]interface{} 但是男孩,这样做会变得丑陋。

有什么方法可以两全其美?

最佳答案

使用 encoding/json 无法解码结构并将未知字段保存在同一级别以进行后重新编码。您可以做的是选择不使用 json.RawMessage 解码结构的一部分。类型,大致如下:

type Person struct {
Name string
Address json.RawMessage
}

您可以通过实现自己的Unmarshaler 来解决这个问题。将文档解码为映射并将未知键保存在结构的字段中,然后有一个对应的Marshaler在编码之前将字段放回原处。

出于好奇,您正在寻找的功能确实存在于 labix.org/v2/mgo/bson 中,通过 inline tag flag ,目标是精确解决您描述的用例。

关于json - 在 Go 中维护未解析的 JSON 字段的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18769014/

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