假设我有一个这样的json响应,正如你可以看到的,有时邮箱存在,有时不存在. 现在,我需要判断邮箱密钥是否存在,并相应地打印json响应. 我怎么能这样做呢?

[
  {"name" : "name1", "mobile": "123", "email": "email1@example.com", "carrier": "carrier1", "city", "city1"},
  {"name" : "name2", "mobile": "1234", "carrier": "carrier2", "city", "city2"}
  ...
]

这里我需要判断p.Email是否存在,如果存在,则指定EMAIL值,如果不指定空字符串

for i, p := range jsonbody.Data {
                        
                        a := p.Name
                        b := p.Phone[i].Mobile
                        c := p.INTaddress[i].Email  // here i need to check 
                        d := p.Phone[i].Carrier
                        e := p.Address[i].City
                          
                         ..........

}
                        

我试着搜索,但没有找到golang 的任何答案.

推荐答案

这里我需要判断p.Email是否存在,如果存在,则指定EMAIL值,如果不指定空字符串

请注意,当您将字段定义为Email string并且传入的JSON提供no "email"条目时,Email字段将保持为空字符串,因此您只需按原样使用即可.不需要额外的判断.

如果您希望允许null,则使用Email *string,并简单地使用if条件来判断nil,如072的答案所建议的那样.

当您需要区分未定义/空/空时,请使用下面答案中建议的自定义反编组拆收器:

type String struct {
    IsDefined bool
    Value     string
}

// This method will be automatically invoked by json.Unmarshal
// but only for values that were provided in the json, regardless
// of whether they were null or not.
func (s *String) UnmarshalJSON(d []byte) error {
    s.IsDefined = true
    if string(d) != "null" {
        return json.Unmarshal(d, &s.Value)
    }
    return nil
}

https://go.dev/play/p/gs9G4v32HWL

然后,对于需要判断是否提供了它们的字段,您可以使用自定义String而不是内置string.要进行判断,显然要判断解组发生时的IsDefined字段.

Json相关问答推荐

PowerShell:将Invoke-WebRequest与变量一起使用

如何创建可由Gin序列化到json的排序键值映射?

用于参考的Jolt变换

德纳比可视化区域图表 Power BI

如何使用jolt将嵌套数据变成线性数据

使用 jq 和脚本 bash 映射两个 json

如何将 JSON 文本作为参数传递给 powershell?

添加到数组时出错:找不到Add的重载和参数计数:1

如何在生产环境中更改 Flutter 应用程序中的数据模型?

在PowerShell中按时间戳过滤JSON

Swift - 将图像从 URL 写入本地文件

如何使用 Serde 使用顶级数组反序列化 JSON?

如何从 JSON 对象中获取日期

如何使用 jq 将 JSON 对象流转换为数组

jQuery AJAX 和 JSON 格式

gson:将 null 视为空字符串

嵌套 JSON:如何向对象添加(推送)新项目?

如何在 Django JSONField 数据上聚合(最小/最大等)?

将循环 struct 转换为 JSON - 有什么方法可以找到它抱怨的字段?

JSON 模式 - 如果对象*不*包含特定属性则有效