首页 >后端开发 >Golang >如何处理不一致的 JSON 字段:字符串与数组?

如何处理不一致的 JSON 字段:字符串与数组?

Barbara Streisand
Barbara Streisand原创
2024-12-05 03:51:13210浏览

How to Handle Inconsistent JSON Fields: Strings vs. Arrays?

处理不一致的 JSON 字段:字符串与数组的情况

处理不完全一致的 JSON 数据时,可能会出现挑战在解组过程中。当 JSON 中的特定字段的格式发生变化,从而给解组过程带来困难时,就会发生这种情况。

问题:

考虑以下场景:

type MyListItem struct {
    Date  string `json:"date"`
    DisplayName       string `json:"display_name"`
}

type MyListings struct {
    CLItems []MyListItem `json:"myitems"`
}

JSON 数据有一个名为“display_name”的字段,该字段应为字符串。但是,在某些情况下,它也可以是字符串数组。这种不一致使解组过程变得复杂,从而导致错误。

解决方案:

为了克服这一挑战,我们可以利用两种技术:

  1. 利用 json.RawMessage: 将有问题的字段捕获为json.RawMessage 类型。
  2. 使用 JSON“-”名称:在 JSON 解码器中将“DisplayName”字段定义为“-”以将其从解组过程中排除。

已更新代码:

type MyListItem struct {
    Date           string          `json:"date"`
    RawDisplayName json.RawMessage `json:"display_name"`
    DisplayName    []string        `json:"-"`
}

解组 JSON:

解组顶级 JSON:

var li MyListItem
if err := json.Unmarshal(data, &li); err != nil {
    // handle error
}

提取“DisplayName” “ 字段取决于其类型:

if len(li.RawDisplayName) > 0 {
    switch li.RawDisplayName[0] {
    case '"':
        if err := json.Unmarshal(li.RawDisplayName, &li.DisplayName); err != nil {
            // handle error
        }
    case '[':
        var s []string
        if err := json.Unmarshal(li.RawDisplayName, &s); err != nil {
            // handle error
        }
        li.DisplayName = strings.Join(s, "&&")
    }
}

示例:

var listings MyListings
if err := json.Unmarshal([]byte(data), &listings); err != nil {
    // handle error
}
for i := range listings.CLItems {
    li := &listings.CLItems[i]
    if len(li.RawDisplayName) > 0 {
        switch li.RawDisplayName[0] {
        case '"':
            if err := json.Unmarshal(li.RawDisplayName, &li.DisplayName); err != nil {
                // handle error
            }
        case '[':
            var s []string
            if err := json.Unmarshal(li.RawDisplayName, &s); err != nil {
                // handle error
            }
            li.DisplayName = strings.Join(s, "&&")
        }
    }
}

通过采用这些技术,您可以有效地处理不一致的 JSON 字段,确保应用程序中正确的数据提取和操作.

以上是如何处理不一致的 JSON 字段:字符串与数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn