Golang JSON的编码和解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: Golang JSON的编码和解析

go JSON解析 JSON编码

编码


定义一个结构体用来放需要进行JSON编码的数据,结构体的字段名必须是大写开头的可导出字段,否则在解析时会解析不出来

使用json.Marshal(v interface{}) ([]byte, error)进行JSON编码

  type Userinfo struct {
    Id       int `json:"id"`
    Username string `json:"username"`
  }
  u := &Userinfo{}
    u.Id = 1
    u.Username = "lauwen"
  j, err := json.Marshal(u)
  if err != nil {
      fmt.Println(err)
    }
    fmt.Println(string(j))

上述代码输出:

{"id":1,"username":"lauwen"}

解析


使用json.Unmarshal(data []byte, v interface{}) error来进行JSON数据的解析,可以看出第一个参数是[]byte类型数据,所以在使用时需要将字符串类型的JSON数据转换为[]byte类型。
  • 以下使用的解析的JSON字符串都由上一步编码而来,为[]byte类型,无需再转类型。
  • 使用的结构体类型也是上面编码时使用到的结构体,不做重复定义。

JSON解析为结构体

已知JSON结构的时候,可以定义一个结构体来存放JSON解析出来的数据

  var ui Userinfo
  err = json.Unmarshal(j, &ui)
  fmt.Println(ui)

以上代码输出:

{1 lauwen}

JSON解析为map

不清楚JSON数据结构时,可以使用map的来存放JSON解析出来的数据;如下,首先定义了一个map类型数据来接收解析后的JSON数据

  var dj map [string] interface{}
  err = json.Unmarshal(j, &dj)
  fmt.Println(dj)

以上代码输出:

map[id:1 username:lauwen]

完整代码


package main
import (
    "encoding/json"
    "fmt"
)
func main() {
  type Userinfo struct {
    Id       int `json:"id"`
    Username string `json:"username"`
  }
  u := &Userinfo{}
    u.Id = 1
    u.Username = "lauwen"
  j, err := json.Marshal(u)
  if err != nil {
      fmt.Println(err)
    }
    fmt.Println(string(j))
  var ui Userinfo
  err = json.Unmarshal(j, &ui)
  fmt.Println(ui)
  var dj map [string] interface{}
  err = json.Unmarshal(j, &dj)
  fmt.Println(dj)
}


目录
相关文章
|
2月前
|
SQL 存储 JSON
SQL,解析 json
SQL,解析 json
76 8
|
1月前
|
存储 安全 Linux
Golang的GMP调度模型与源码解析
【11月更文挑战第11天】GMP 调度模型是 Go 语言运行时系统的核心部分,用于高效管理和调度大量协程(goroutine)。它通过少量的操作系统线程(M)和逻辑处理器(P)来调度大量的轻量级协程(G),从而实现高性能的并发处理。GMP 模型通过本地队列和全局队列来减少锁竞争,提高调度效率。在 Go 源码中,`runtime.h` 文件定义了关键数据结构,`schedule()` 和 `findrunnable()` 函数实现了核心调度逻辑。通过深入研究 GMP 模型,可以更好地理解 Go 语言的并发机制。
|
1月前
|
JSON 缓存 前端开发
PHP如何高效地处理JSON数据:从编码到解码
在现代Web开发中,JSON已成为数据交换的标准格式。本文探讨了PHP如何高效处理JSON数据,包括编码和解码的过程。通过简化数据结构、使用优化选项、缓存机制及合理设置解码参数等方法,可以显著提升JSON处理的性能,确保系统快速稳定运行。
|
3月前
|
JSON API 数据格式
requests库中json参数与data参数使用方法的深入解析
选择 `data`或 `json`取决于你的具体需求,以及服务器端期望接收的数据格式。
287 2
|
3月前
|
JSON 前端开发 JavaScript
解析JSON文件
解析JSON文件
141 9
|
2月前
|
JSON JavaScript API
商品详情数据接口解析返回的JSON数据(API接口整套流程)
商品详情数据接口解析返回的JSON数据是API接口使用中的一个重要环节,它涉及从发送请求到接收并处理响应的整个流程。以下是一个完整的API接口使用流程,包括如何解析返回的JSON数据:
|
3月前
|
JSON Go 数据格式
Golang语言结构体链式编程与JSON序列化
这篇文章是关于Go语言中结构体链式编程与JSON序列化的教程,详细介绍了JSON格式的基本概念、结构体的序列化与反序列化、结构体标签的使用以及如何实现链式编程。
46 4
|
3月前
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
201 0
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
71 2
|
2月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
76 0