解组 JSON 并区分缺失键和空值

mik*_*e_b 2 api json go

我正在使用一个应用程序 API,它以null不同的方式处理 JSON 中缺失的键和值。{"value":null}它可能会像or一样返回 JSON {}- 如果密钥存在,它们意味着不同的东西。我的问题是我需要将数据解组为 a struct,然后编组回 JSON,保留这种细微差别。

如果我定义一个结构,如:

type Test struct {
    Value *string `json:"value,omitempty"`
}
Run Code Online (Sandbox Code Playgroud)

然后{"value":null}将其编组为 JSON 作为{}.

如果我定义一个结构,如:

type Test struct {
    Value *string `json:"value"`
}
Run Code Online (Sandbox Code Playgroud)

然后{}将其编组为 JSON 作为{"value":null}.

有没有办法处理从 JSON 读取的 null 和缺失键,并保留缺失键与 null 值之间的差异?

Bur*_*dar 5

如果您必须区分字段的空值和不存在,您可以使用json.RawMessage

type Test struct {
    Value json.RawMessage `json:"value,omitempty"`
}
Run Code Online (Sandbox Code Playgroud)

您可以测试string(test.Value)=="null"len(test.Value)==0找出发生了哪种情况。