encoding/json

2024-06-11 01:08
文章标签 json encoding

本文主要是介绍encoding/json,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

json 包实现了json对象的编解码

  • 获取v变量的json编码
  • 将json编码的数据存入到解析v变量中
  • 如何实现延时解析
  • 实现标准HTML转义
  • 实现json字符串格式缩进和前缀
  • 剔除编码后数据中的空白字符
  • 结构体json编码选项应用
获取v变量的json编码

func Marshal(v interface{}) ([]byte, error)

package mainimport ("encoding/json""fmt""log"
)type User struct {Name stringAge int64
}func main() {user := User{"酷走天涯",27}b,error:=json.Marshal(user)if error != nil {log.Fatal(error)}fmt.Println(string(b))
}
1594482-e4ea392c8970d9b3.png
image.png

将json编码的数据存入到解析v变量中

func Unmarshal(data []byte, v interface{}) error

package main
import ("encoding/json""fmt""log"
)type User struct {Name stringAge int64
}func main() {data := []byte(`{"Name":"酷走天涯","Age":27}`)var user *Usererror:=json.Unmarshal(data,&user)if error != nil {log.Fatal(error)}fmt.Println(user)
}
1594482-61cda0fb91ce556e.png
image.png

如何实现延时解析
package mainimport ("encoding/json""fmt""log"
)type Animal struct {Kind stringData json.RawMessage
}type Dog struct{Name string
}
type Sheep struct{Name stringAge int
}func main() {data := []byte(`[{"Kind":"Dog","Data":{"Name":"小黄"}},{"Kind":"Sheep","Data":{"Name":"小绵阳","Age":12}}]`)// 第一层转换数据var animals *[]Animalerror:=json.Unmarshal(data,&animals)if error != nil {log.Fatal(error)}
// 第二层 跟你kind 类型选择对应的模型进行转换for _,c := range *animals{var dst  interface{}switch c.Kind {case "Dog": dst = new(Dog)case "Sheep": dst = new(Sheep)}error := json.Unmarshal(c.Data,dst)if error != nil {fmt.Println(error)}fmt.Println(dst)}fmt.Println(animals)
}
1594482-7e80f479b5df7588.png
image.png

实现标准HTML转义

func HTMLEscape(dst *bytes.Buffer, src []byte)

HTMLEscape 函数将json编码的src中的<、>、&、U+2028 和U+2029字符替换为\u003c、\u003e、\u0026、\u2028、\u2029 转义字符串,以便json编码可以安全的嵌入HTML的<script>标签里,
网络浏览器不支持在<script>标签中使用标准HTML转义

package mainimport ("encoding/json""bytes""fmt"
)func main() {data := []byte(`<div>这个是html标签</div>`)var buffer bytes.Bufferjson.HTMLEscape(&buffer,data)fmt.Println(buffer.String())
}
1594482-c7f911e7f05ab5ab.png
image.png

实现json字符串格式缩进和前缀

func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error)
func Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error

package mainimport ("encoding/json""fmt"
)
func main() {data := []map[string]string {{"name":"小黄"},{"name":"小白"}}result,_:=json.MarshalIndent(data,"=","\t")fmt.Println(string(result))
}
1594482-8f261a79136ec7ca.png
image.png

剔除编码后数据中的空白字符

func Compact(dst *bytes.Buffer, src []byte) error

package mainimport ("encoding/json""fmt""bytes"
)func main() {data := []map[string]string { {"name": "小黄"},{"name": "小白"}}src,_ := json.MarshalIndent(data,"","\t")var buf bytes.Bufferjson.Compact(&buf,src)fmt.Println(string(src))fmt.Println(buf.String())
}
1594482-2b78aa84b78c0b4d.png
image.png
结构体json编码选项应用
  • 忽略字段 (Field int json:"-")
  • 修改编码后的键值名(Field int json:"myName")
  • 字段空值忽略编码(Field int json:"myName,omitempty")
  • 设置默认值,如果值为空,则忽略(Field int json:",omitempty")
  • 格式转换 (Int64String int64 json:",string")
package main
import ("encoding/json""fmt"
)type User struct{Id int `json:"-"`Name string `json:"myName"`Age int `json:"myAge,omitempty"`Address string `json:",omitempty"`Sex int `json:",string"`
}func main() {user := User{Id:10,Name:"酷走天涯",Age:12,Address:"dd",Sex:1}data,error := json.Marshal(user)if error != nil {fmt.Println(error)}fmt.Println(string(data))user = User{Id:10,Name:"酷走天涯",Sex:1,Address:""}data,error = json.Marshal(user)if error != nil {fmt.Println(error)}fmt.Println(string(data))}
1594482-6bd104296b9f06d5.png
image.png

这篇关于encoding/json的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1049786

相关文章

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要

Spring的RedisTemplate的json反序列泛型丢失问题解决

《Spring的RedisTemplate的json反序列泛型丢失问题解决》本文主要介绍了SpringRedisTemplate中使用JSON序列化时泛型信息丢失的问题及其提出三种解决方案,可以根据性... 目录背景解决方案方案一方案二方案三总结背景在使用RedisTemplate操作redis时我们针对

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA