使用不一致字段解组 JSON:处理字符串和数组
将 JSON 数据解组到 Go 结构体时,处理字段可能具有挑战性其类型可能有所不同。例如,字段在大多数情况下可能是字符串,但有时可能是字符串数组。为了解决这个问题,我们提出了一个利用 Go 强大的 JSON 解析能力的解决方案。
使用 json.RawMessage 捕获变化字段
处理不一致 JSON 字段的关键关键在于使用 json.RawMessage 捕获原始数据。此类型是存储未解析的 JSON 值的字节切片。通过存储原始数据,我们可以灵活地根据其具体类型稍后对其进行解析。
隐藏 DisplayName 字段并在解码后填充它
以防止为了防止解码器在获得相关数据之前尝试解释 DisplayName 字段,我们使用 JSON“-”名称隐藏它。该名称指示解码器在初始解组期间忽略该字段。顶级 JSON 解码后,我们根据解析的原始数据手动填充 DisplayName 字段。
处理各种类型的原始数据
取决于无论原始数据是字符串还是字符串数组,我们都按如下方式进行:
集成到循环中MyListings
要处理项目列表(例如 MyListings),我们可以迭代每个项目并执行与上述相同的解组逻辑。这使我们能够处理每个项目的 DisplayName 字段中的任何不一致。
使用自定义解组器封装逻辑
如果数据模型中的多个字段可能不一致类型,将逻辑封装在实现 json.Unmarshaler 接口的自定义类型中是有益的。这简化了流程并减少了重复。
总之,通过使用 json.RawMessage 并隐藏变化的字段,我们可以有效地解组具有不一致字段的 JSON 数据,确保正确捕获和解析所有必要的数据。提供的示例和游乐场链接演示了实践中的解决方案。
以上是如何在 Go 中处理不一致的 JSON 字段(字符串与数组)?的详细内容。更多信息请关注PHP中文网其他相关文章!