gpt4 book ai didi

json - 如何在Json中解码多/单值

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

我想对请求JSON进行解码,该请求JSON的值可以是单个字符串或数组(列表)。
我知道如何分别解析。但我正在寻找一种具有动态解码器来解析两者的方法。
JSON中的value字段就是我正在谈论的情况
单值样本:

{
"filter":{
"op":"IN",
"field":"name",
"value": "testDuplicate"
}
}
多值样本:
{
"filter":{
"op":"IN",
"field":"name",
"value":["testDuplicate","tt"]
}
}
单一值的结构:
type DocumentTypeSearchRequest struct {
Filter DocTypeFilter `json:"filter"`
}
type DocTypeFilter struct {
Op string `json:"op"`
Field string `json:"field"`
Value string `json:"value"`
}
多值结构:
type DocumentTypeSearchRequest struct {
Filter DocTypeFilter `json:"filter"`
}
type DocTypeFilter struct {
Op string `json:"op"`
Field string `json:"field"`
Value []string `json:"value"`
}
一种解决方案是尝试使用其中一种进行解码,如果失败,则使用另一种进行解码,但是我不确定这是否是解决此问题的正确方法。

最佳答案

您需要一个自定义拆组器。我已经讨论过类似的情况in this video:

type Value []string

func (v *Value) UnmarshalJSON(p []byte) error {
if p[0] == '[' { // First char is '[', so it's a JSON array
s := make([]string, 0)
err := json.Unmarshal(p, &s)
*v = Value(s)
return err
}
// else it's a simple string
*v = make(Value, 1)
return json.Unmarshal(p, &(*v)[0])
}
Playground link
使用 Value的此定义,您的结构将变为:
type DocTypeFilter struct {
Op string `json:"op"`
Field string `json:"field"`
Value Value `json:"value"`
}
现在您的 Value字段将始终是一个 slice ,但是当您的JSON输入是字符串而不是数组时,它可能仅包含一个值。

关于json - 如何在Json中解码多/单值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65198141/

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