Go语言处理JSON之——利用Unmarshal解析json字符串

[Golang] 实战-go中json.Marshal()和json.Unmarshal()的使用 😚一个不甘平凡的普通人,致力于为Golang社区和算法学习做出贡献,期待您的关注和认可,陪您一起学习打卡!json.Marshal()和json.Unmarshal()是Go语言中用于编码和解码JSON数据的两个重要函数。json.Unmarsal() 将JSON格式的数据解码为对应的go中的数据。json,Marshal() 把数据转化为JSON格式的字符串。 阅读详情

简单的解析例子:
首先还是从官方文档中的例子:

package main

import (
	"fmt"
	"encoding/json"
)

type Animal struct {
    Name  string
    Order string
}

func main() {
	var jsonBlob = []byte(`[
		{"Name": "Platypus", "Order": "Monotremata"},
		{"Name": "Quoll",    "Order": "Dasyuromorphia"}
	]`)

	var animals []Animal
	
	err := json.Unmarshal(jsonBlob, &animals)
	if err != nil {
	    fmt.Println("error:", err)
	}
	fmt.Printf("%+v", animals)
}

输出:

[{Name:Platypus Order:Monotremata} {Name:Quoll Order:Dasyuromorphia}]

简单进行修改,修改为:

package main

import (
	"fmt"
	"encoding/json"
)

type Animal struct {
    Name  string
    Order string
}

func main() {
	var jsonBlob = []byte(`{"Name": "Platypus", "Order": "Monotremata"}`)
	var animals Animal
	err := json.Unmarshal(jsonBlob, &animals)
	if err != nil {
	    fmt.Println("error:", err)
	}
	fmt.Printf("%+v", animals)
}

输出:

{Name:Platypus Order:Monotremata}

还是之前的例子:
解析这样的一个json字符串:

{
    "first fruit":
    {
        "describe":"an apple",
        "icon":"appleIcon",
        "name":"apple"
    },
    "second fruit":
    {
        "describe":"an orange",
        "icon":"orangeIcon",
        "name":"orange"
    },
    "three fruit array":
    [
        "eat 0",
        "eat 1",
        "eat 2",
        "eat 3",
        "eat 4"
    ]
}

go代码:

package main

import (
	"fmt"
	"encoding/json"
)

type Fruit struct {
	Describe string `json:"describe"`
	Icon     string `json:"icon"`
	Name     string `json:"name"`
}

type FruitGroup struct {
	FirstFruit  *Fruit `json:"first fruit"`  //指针,指向引用对象;如果不用指针,只是值复制
	SecondFruit *Fruit `json:"second fruit"` //指针,指向引用对象;如果不用指针,只是值复制
	THreeFruitArray []string `json:"three fruit array"`
}

func main() {
	var jsonBlob = []byte(`{
    "first fruit": {
        "describe": "an apple",
        "icon": "appleIcon",
        "name": "apple"
    },
    "second fruit": {
        "describe": "an orange",
        "icon": "appleIcon",
        "name": "orange"
    },
    "three fruit array": [
        "eat 0",
        "eat 1",
        "eat 2",
        "eat 3"
    ]}`)

	var fruitGroup FruitGroup
	
	err := json.Unmarshal(jsonBlob, &fruitGroup)
	if err != nil {
	    fmt.Println("error:", err)
	}
	fmt.Printf("%+v\n", fruitGroup)
	fmt.Printf("%+v\n", fruitGroup.FirstFruit)
	fmt.Printf("%+v\n", fruitGroup.SecondFruit)
}

运行结果:

{FirstFruit:0xc00006c5a0 SecondFruit:0xc00006c5d0 THreeFruitArray:[eat 0 eat 1 eat 2 eat 3]}
&{Describe:an apple Icon:appleIcon Name:apple}
&{Describe:an orange Icon:appleIcon Name:orange}
Go语言中处理JSON的高效方法 本文还有配套的精品资源,点击获取 简介:JSON是一种常见的数据交换格式,Go语言的 encoding/json 包提供了基础的解析和编码支持。文章介绍了如何使用Go语言进行JSON的解析、编码、格式化、流处理以及错误处理,并探讨了如何通过接口自定义解析器和编码器。此外,还提到了一些高级特性,包括JSON Pointer、JSON Patch、JSON Mer... 阅读详情

相关推荐

用友BIP培训资料-设计采购订单新增API接口开发

14.在子实体的String pkMeas = order_hhrSlave0VOJson.getString("pk_meas");Openapi路径:nccloud/api/pu/order_hhrmanage/order_hhrMaster/addAggOrder_hhrMasterVO。实现接口的开发部署,通过openAPI的test类,实现一条数据的插入。16.进入自己的Idea打开老师发的TestOpenApi并且编译完成后如下。12.编写检测是否字段中是否含有中文的方法。

m0_68497879的博客 1546

Go的json解析:Marshal与Unmarshal

转自:https://blog.csdn.net/zxy_666/article/details/80173288 作者:滢光点点 来源:优快云 原文:https://blog.csdn.net/zxy_666/article/details/80173288 简介 Json(Javascript Object Nanotation)是一种数据交换格式,常用于前后端数据传输。任意一...

u011947630的博客 5480

【智能优化算法】2024年SCI鳗鱼-石斑鱼优化算法(EGO),含MathType公式、word伪代码、visio流程图、matlab代码等。

该文中包括5个内容:用MathType编辑的公式、伪代码、visio的流程图,matlab代码,PDF论文,拿来直接用,可以帮助科研者省下超多时间。 鳗鱼-石斑鱼优化算法(Eel and grouper optimizer ,EGO)是一种新型的元启发式算法(智能优化算法),灵感来源于海洋生态系统中鳗鱼和石斑鱼的共生作用和觅食策略。该成果由Ali Mohammadzadeh和Seyedali Mirjalili两位作者于2024年6月发表在SCI著名期刊《Cluster Computing》上。

2301_79359347的博客 1042

Go中为什么json.Unmarshal为什么需要指向map的指针?

我知道,如果我将一个映射传递给一个函数,然后向该映射添加数据,则该映射的基础数据将被更改(请参见下面的操场示例),这意味着如果我将一个指针传递给 一张地图。至于为什么发生这种情况,从代码角度来看,json.Unmarshal的最后一行调用d.unmarshal(),该代码将执行decode.go的176-179行中的代码。如果在(1)中已经分配了映射,则在(2)中m1所指向的基础映射数据结构的地址(不是m1的地址)将被复制到m。切片(和地图)使用指针使它们轻巧,是的,但是还有更多的东西可以使它们工作。

ZN175623的博客 4659

VirtualBox 7.0.8 + Android-x86 9.0 保姆级安装教程(附图形界面卡顿解决方案)

本文提供VirtualBox 7.0.8与Android-x86 9.0的详细安装教程及性能优化方案,帮助开发者解决图形界面卡顿问题。从环境准备到高级配置,涵盖硬件要求、安装步骤、显存优化及ADB调试等实用技巧,显著提升虚拟机流畅度,适用于应用测试和开发调试。

weixin_29224309的博客 524

MATLAB小白也能搞定!BCT脑网络分析工具箱安装与入门指南

本文为零基础用户提供了一份详尽的BCT脑网络分析工具箱安装与入门指南。从MATLAB环境配置、BCT工具箱下载与路径添加,到连接矩阵构建、节点度与聚类系数等基础指标计算,手把手带领神经科学研究者跨越编程门槛,快速掌握脑影像数据分析的核心流程。

threejs5artist的博客 1092

【Golang | json】golang解析json数据的4种方法

现在有一个json格式的字符串,应该怎么解析呢,这里总结了以下4种方法。

土豆 1万+

汽车LED驱动芯片TPS92682-Q1 SPI接口配置与调试实战指南

SPI(串行外设接口)作为一种高速、全双工的同步串行通信总线,广泛应用于微控制器与外围设备之间的数据交换。其工作原理基于主从架构,通过时钟、数据线和片选信号实现设备间的精准时序控制。在汽车电子和工业控制领域,SPI因其简单高效、易于扩展的特性,成为配置复杂电源管理芯片、传感器和存储器的关键技术。通过SPI接口,工程师能够动态调整设备参数、实时读取状态信息,并实现复杂的故障诊断与保护策略,极大地提升了系统的灵活性与可靠性。本文以汽车级双通道LED恒流驱动器TPS92682-Q1为例,深入解析如何通过SPI接口

weixin_29185493的博客 288

json.Marshal和json.Unmarshal的使用

1. json.Marshal(person) type Student struct { Name string `json:"name"` Age int `json:"age"` High int `json:"high"` Sex string `json:"sex"` Class *Class `json:"class"` } type Class struct { ClassName string `json:"classname"` Grade

lanseali的博客 1万+

从时序参数到电压供给:TTL(RGB)液晶屏驱动调试全解析

本文全面解析TTL(RGB)液晶屏驱动调试的关键技术,从时序参数配置到电压供给系统搭建,详细介绍了同步信号参数、寄存器配置技巧以及升压电路设计。通过实战案例和常见故障分析,帮助工程师快速掌握液晶显示屏调试方法,提升开发效率。

weixin_30588675的博客 247

从零到一:ArduPilot无人船PID调参实战指南

本文详细介绍了ArduPilot无人船PID调参的实战指南,从基础参数设定到高级调参技术,帮助用户掌握水面环境下的PID控制逻辑。通过案例分析和参数示例,解决无人船在空载、负载变化及不同水域环境中的航行问题,提升无人船的稳定性和精确度。

weixin_29266647的博客 507

Go语言之JSON处理

    Go语言内建对JSON的支持。使用Go语言内置的encoding/json标准库,开发者可以轻松使用Go程序生成和解析JSON格式的数据。在Go语言实现JSON的编码和解码时,遵循RFC4627协议标准。   1.编码为JSON格式    使用json.Marshal()函数可以对一组数据进行JSON格式的编码。json.Marshal()函数的声明如下:    假如有如下一个...

冷月醉雪的博客 2万+

C#版OpenCV:OpenCVSharp 最详细最全面教程(万字详细总结)

OpenCVSharp 是一个用于 .NET 环境的 OpenCV 包装库,它提供了一种简便的方法来利用 OpenCV 的功能进行图像和视频处理。OpenCV(Open Source Computer Vision Library)是一个开源计算机视觉和机器学习软件库,最初由 Intel 研发并发布。OpenCVSharp 让 C# 和其他 .NET 语言的开发者可以方便地访问 OpenCV 的强大功能。// 打印 OpenCV 版本信息Cv2。

仰望星空的博客 2万+

Go语言解析Json

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,用于在不同的平台和语言之间传递数据。JSON 格式的数据由键值对组成,键和值之间使用冒号分隔,键值对之间使用逗号分隔,整个数据使用大括号包裹。本文详细介绍了 Go 语言中如何解析 JSON,包括 JSON 的定义、解析的方法、示例代码等方面。在实际开发中,我们经常需要处理 JSON 格式的数据,掌握 JSON 解析的方法是非常重要的。

GeeCode的博客 2233

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

golang_JSON处理: go中如何利用encoding/json包中Marshal函数生成JSON以及Unmarshal函数解析JSON

JSON处理 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式 Json在线解析及格式化网站:https://www.json.cn/ encoding/json包 func Marshal(v interface{}) ([]byte, error) Marshal函数返回v的json编码。 func MarshalIndent(v interfac...

Grayan的博客 2349

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

golang json.unmarshal string

在项目中golang处理string时遇到 string json.unmarshal 失败问题,在此记录一下: package main import "encoding/json" import "fmt" func main() { str := "golang" // test 1 strA, _ := json.Marshal(str) // strA len:8, ...

nlw2008的专栏 2878

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Go的marshal unmarshal

1.定义 marshal:输入数据,转化为[]byte 入参:我们输入的数据,类型为任意类型 出参:返回数据为结果和错误 结果为[]byte []uint8类型 全部都是数字, 使用os.Stdout.Write(b)将ascii转化为字符 unmarshal:将[]byte转化为任意我们规定的类型 入参:第一个参数是我们输入的数据,类型是[]byte uint8类型的切片;第...

思维小刀 7620

Golang json解析踩坑

背景 众所周知,PHP是弱类型,Go是强类型,所以Go的json解析注定曲折。 有一段json如下: {"name":"Gopher","age":23,"marray":false} PHP使用:json_decode函数解析,解出的数据类型并不重要 Go解析: 使用json.Unmarshal函数,此函数如果使用原生函数 ,目标结构体字段数字类型定义为字符串类型,那么解析结果中会丢失数字类型,即原生解析,无法把数字类型解析为字符创类型 解决方案 如果场景中确实需要将数字类型的数据.

PHPerJiang 4651

golang json.Marshal & json.Unmarshal

json.Marshal:将某种数据结构生成为json字符串 json.Unmarshal:将json字符串转换为其他数据结构 package main import ( "encoding/json" "fmt" ) type Stu struct { Name string `json:"Name"` Age int Sex string Class *Class `json:"Class"` } type Class struct { Name string Gr

haiziccc的专栏 1387

go Unmarshal error json cannot unmarshal string into Go struct field (1)

为结构定义一个自定义的方法。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!一个人可以走的很快,但一群人才能走的更远!

2401_84297618的博客 1255

Go语言对json处理总结

Go语言对json处理总结

hsy12342611的专栏 2719

go- json-rpc服务收到json报错gunmarshaling request: json: cannot unmarshal string into Go

go收到json,解析报错 无法将字符串解组为int64类型的Go值 参考URL:https://qa.1r1g.com/sf/ask/1480623581/ 问题背景: json-rpd OkHttpClient client = new OkHttpClient(); HashMap<String,Object> jsonMap = new HashMap<>(); jsonMap.put("jsonrpc","2.0");

西京刀客 6895

Go中json.Unmarshal对数字类型的处理

JSON的规范中,对于数字类型,并不区分是整型还是浮点型。 对于如下JSON文本: { "name": "ethancai", "fansCount": 9223372036854775807 } 如果反序列化的时候指定明确的结构体和变量类型 package main import ( "encoding/json" "fmt" ) type User struct { Name string FansCount int64 } func m

稻草人技术博客 5798

golang 解析json字串(Unmarshal() 函数,解析http)

文章目录1. js解析1.1 示例 11.2. 示例22. go 解析 http 传递的json数据 1. js解析 1.1 示例 1 要解析的json格式如下 { "project_members": [{ "name": "ZhaoYun", "number": "000005" }, { "name": "WeiYan", "number": "000019" } ] } json分析: project_members 的值是一个组,组中有两个成员 每

架构+开发+运维 2723

go Unmarshal error json cannot unmarshal string into Go struct field

错误信息“json: cannot unmarshal string into Go struct field .timestamp of type int64”告诉我们,我们试图将一个字符串类型的JSON字段解析为Go结构中的一个int64类型字段,这显然是不允许的。然而,类型不匹配会引发解码错误,特别是当JSON字段与Go结构字段的类型不一致时。如果我们对数据源有控制权,最直接的方法是确保JSON字段的类型与Go结构字段的类型匹配。作为字段类型,然后在代码中进行类型断言。有几种方法可以解决这个问题。

2401_84297717的博客 1169
上一篇: Go语言处理JSON之——利用Marshal生成json字符串(二)
下一篇: Go网络编程之echo
hp_cpp
博客等级 码龄11年 310粉丝 218原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值