我想解码一个请求 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"`} 一种解决方案是尝试在其中一个解码失败时使用另一个解码,但我不确定这是否是处理此问题的正确方法。
1 回答
守着一只汪
TA贡献1872条经验 获得超3个赞
您需要一个自定义解组器。我在这个视频中谈到了类似的情况:
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])
}
使用 的这个定义Value,你的结构会变成这样:
type DocTypeFilter struct {
Op string `json:"op"`
Field string `json:"field"`
Value Value `json:"value"`
}
现在您的Value字段将始终是一个切片,但是当您的 JSON 输入是字符串而不是数组时,它可能只包含一个值。
- 1 回答
- 0 关注
- 91 浏览
添加回答
举报
0/150
提交
取消