ZBLOG

var ipv4Array []string err = json.Unmarshal([]byte(intermediate.Ipv4Addresses), &ipv4Array) if err != nil { logger.ManagementLog.Infoln("Error unmarshalling ipv4 addresses:", err) return } 如果intermediate.Ipv4Addresses是“”

如果 intermediate.Ipv4Addresses 是一个空字符串 (""),那么在调用 json.Unmarshal 的时候将会出现问题,因为你试图将一个空字符串解码为数组。这会导致错误,因为空字符串并不是有效的 JSON 数组格式。

为了处理这种情况,可以在尝试解码之前检查该字段是否为空。以下是如何改进代码以避免这种情况的示例:

package main

import (
	"encoding/json"
	"fmt"
)

type CustomNfProfile struct {
	Ipv4AddressesRaw string   `json:"ipv4Addresses"`
	Ipv4Addresses    []string // 用于存储 IPv4 地址数组
}

// UnmarshalJSON 自定义解组函数,用于解析 CustomNfProfile 中的 Ipv4AddressesRaw 字段。
func (c *CustomNfProfile) UnmarshalJSON(data []byte) error {
	type Alias CustomNfProfile
	aux := &struct {
		*Alias
	}{
		Alias: (*Alias)(c),
	}

	if err := json.Unmarshal(data, &aux); err != nil {
		return err
	}

	if aux.Ipv4AddressesRaw == "" {
		c.Ipv4Addresses = []string{} // 如果原始字符串为空,则初始化为一个空切片
		return nil
	}

	var ipv4Array []string
	err := json.Unmarshal([]byte(aux.Ipv4AddressesRaw), &ipv4Array)
	if err != nil {
		return err
	}
	c.Ipv4Addresses = ipv4Array

	return nil
}

func main() {
	jsonData1 := `{"ipv4Addresses":"[\"192.168.1.1\", \"10.0.0.1\"]"}`
	jsonData2 := `{"ipv4Addresses":""}` // 测试空字符串的情况

	var nfProfile1 CustomNfProfile
	var nfProfile2 CustomNfProfile

	err1 := json.Unmarshal([]byte(jsonData1), &nfProfile1)
	if err1 != nil {
		fmt.Println("Error unmarshalling JSON:", err1)
	} else {
        fmt.Printf("Parsed NfProfile 1: %+v\n", nfProfile1)
    }

	err2 := json.Unmarshal([]byte(jsonData2), &nfProfile2)
	if err2 != nil {
        fmt.Println("Error unmarshalling JSON:", err2)
    } else {
        fmt.Printf("Parsed NfProfile 2: %+v\n", nfProfile2)
    }
}

修改说明:

  • 在自定义的 UnmarshalJSON 方法中,在调用 json.Unmarshal 解码之前,我们检查了 aux.Ipv4AddressesRaw 是否为空。如果它是空的,我们直接将 c.Ipv4Addresses 初始化为一个空切片,这样就避免了对空字符串进行解码操作。
  • 这样处理后,代码能够安全地处理输入,包括空值情况,而不会引发运行时错误。


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=7132

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?