首页 > 后端开发 > Golang > 如何有效地解组不一致的字符串或数组 JSON 字段?

如何有效地解组不一致的字符串或数组 JSON 字段?

Mary-Kate Olsen
发布: 2024-12-05 14:53:14
原创
448 人浏览过

How Can I Efficiently Unmarshal Inconsistent String or Array JSON Fields?

解组灵活的 JSON 字段:转换不一致的字符串或数组值

问题

当字段可能不一致时,解组 JSON 可能会很困难,显示为字符串或字符串数​​组。这种不一致可能会导致解组错误,从而导致您的应用程序失败。

解决方案

使用原始 JSON 数据捕获

利用 json.RawMessage 数据结构来捕获变化的 JSON 字段作为原始数据。此外,利用 json“-”名称标签在初始解码阶段隐藏该字段。

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

解组顶级 JSON

解组顶级 -级别 JSON 结构,无需填充 DisplayName 字段。

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

解析原始显示名称

根据原始数据的类型,将显示名称解组为适当的格式。

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
        }
        // Join arrays with "&&"
        li.DisplayName = strings.Join(s, "&&")
    }
}
登录后复制

处理列表数组

将上述逻辑集成到循环中以处理 MyListings 中的 MyListItem 对象数组

var listings MyListings
if err := json.Unmarshal([]byte(data), &listings); err != nil {
    // handle error
}
for i := range listings.CLItems {
    li := &listings.CLItems[i]
    // Parse raw display name
    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.Unmarshaler 接口的自定义类型中.

句柄数组值

要将字段值保留为字符串切片而不是连接字符串,请相应地修改 multiString 类型。

这些技术提供了处理不一致 JSON 字段的强大方法,确保成功的解组和准确的数据检索。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板