ZBLOG

recordData ,127.0.0.1:6379> hgetall nfprofile:NF_INSTANCE_ID_12222 1) "ipv4Addresses" 2) "[\"192.168.1.1\", \"10.0.0.1\"]" 3) "nfInstanceId" 4) "NF_INSTANCE_ID_12222" 5) "nfType" 6) "UDR" 7) "nfStatus" 8) "REGISTERED" 9) "plmnList" ,调用其中j...

如果在调用 json.Unmarshal 反序列化 ipv4Addresses 时失败,通常可能是由于 JSON 字符串的格式不正确或类型不匹配。你提供的 Redis 哈希中,ipv4Addresses 的值是一个字符串形式的 JSON 数组。为了成功反序列化它,你需要确保正确处理这个值。

下面是如何进行操作的步骤:

示例代码

假设你已经从 Redis 中获得了该哈希的数据,并且要解析其中的 ipv4Addresses 字段:

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	// 模拟从 Redis 获取到的数据
	data := map[string]string{
		"ipv4Addresses": "[\"192.168.1.1\", \"10.0.0.1\"]",
		"nfInstanceId":  "NF_INSTANCE_ID_12222",
		"nfType":        "UDR",
		"nfStatus":      "REGISTERED",
		"plmnList":      "",
	}

	var ipv4Addresses []string

	ipv4Str, ok := data["ipv4Addresses"]
	if !ok {
		fmt.Println("ipv4Addresses not found")
		return
	}

	err := json.Unmarshal([]byte(ipv4Str), &ipv4Addresses)
	if err != nil {
		fmt.Println("Error unmarshalling ipv4Addresses:", err)
		return
	}

	fmt.Println("Parsed IPv4 Addresses:", ipv4Addresses) // 输出: Parsed IPv4 Addresses: [192.168.1.1 10.0.0.1]
}

代码解释:

  1. 模拟数据:我们创建一个模拟的 map 来表示从 Redis 获取的数据,其中 ipv4Addresses 是一个字符串,它看起来像是 JSON 数组。

  2. 获取字段:通过键获取 ipv4Addresses 字段。如果不存在,则打印错误消息并返回。

  3. 反序列化:使用 json.Unmarshal() 将字符串解析为 Go 的切片类型 []string。注意,我们首先将字符串转换为字节切片(使用 []byte(ipv4Str))。

  4. 错误处理:如果在反序列化过程中遇到错误,打印错误信息并返回。

  5. 输出结果:如果成功,打印解析后的 IP 地址切片。

常见问题与解决方案

  • JSON 格式不正确:确保你的 JSON 字符串格式是有效的,例如,在字符串中应该有合法的引号和括号。

  • 反序列化目标类型不匹配:确认你希望将数据存储在哪种类型中。在这种情况下,我们希望将其存储为 []string

  • 数据来源问题:如果你从 Redis 中获取数据时出错,请检查是否成功连接到 Redis,以及所请求的数据是否存在。

通过以上方法,你应该能够正确地将 JSON 格式的字符串反序列化为 Go 的切片类型。如果还有其他问题,请随时提问!


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?