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

相关文章

php中json_decode()和json_encode()

1.json_decode() json_decode (PHP 5 >= 5.2.0, PECL json >= 1.2.0) json_decode — 对 JSON 格式的字符串进行编码 说明 mixed json_decode ( string $json [, bool $assoc ] ) 接受一个 JSON 格式的字符串并且把它转换为 PHP 变量 参数 json

struts2中的json返回指定的多个参数

要返回指定的多个参数,就必须在struts.xml中的配置如下: <action name="goodsType_*" class="goodsTypeAction" method="{1}"> <!-- 查询商品类别信息==分页 --> <result type="json" name="goodsType_findPgae"> <!--在这一行进行指定,其中lis是一个List集合,但

特殊JSON解析

一般的与后台交互;都会涉及到接口数据的获取;而这里的数据一般情况就是JSON 了;JSON 解析起来方便;而且数据量也较小一些;所以JSON在接口数据返回中是个很不错的选择。 下面简单说下JSON解析过程中的一些案例: 这里我用到了三方的架包:fastjson-1.1.39.jar 架包 可以在我的博客中找到下载;或者网上找下 很多的; 这里主要就是映射  关系了;这就要求:实体类的名称和

用ajax json给后台action传数据要注意的问题

必须要有get和set方法   1 action中定义bean变量,注意写get和set方法 2 js中写ajax方法,传json类型数据 3 配置action在struts2中

go json反序列化成指定类型

简介 简单的介绍一下使用go的json库,将json字符串反序列化成接口中指定的实现类 代码如下 package usejsontype ExamInterface interface {CheckRule(data any) bool}type IntStru struct {DefalutVal int `json:"defalut_val"`Max int `json:

Java构造和解析Json数据的两种方法(json-lib构造和解析Json数据, org.json构造和解析Json数据)

在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别。下面首先介绍用json-lib构造和解析Json数据的方法示例。 一、介绍       JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json

Ajax中根据json数据不同,对页面上的单选框Radio进行回显

Ajax中根据json数据不同,对页面上的单选框Radio进行回显 js代码: $(document).ready(function(){$.ajax({type: "POST",url: path+"/pop/nowTodayMeet2",dataType: "json",success: function(data){$("#discussTopicsEdit").val(da

C++利用jsoncpp库实现写入和读取json文件(含中文处理)

C++利用jsoncpp库实现写入和读取json文件 1 jsoncpp常用类1.1 Json::Value1.2 Json::Reader1.3 Json::Writer 2 json文件3 写json文件3.1 linux存储结果3.2 windows存储结果 3 读json文件4 读json字符串参考文章 在C++中使用跨平台的开源库JsonCpp,实现json的序列化和反序列

【SpringMVC学习07】SpringMVC与前台的json数据交互

json数据格式在接口调用中、html页面中比较常用,json格式比较简单,解析也比较方便,所以使用很普遍。在springmvc中,也支持对json数据的解析和转换,这篇文章主要总结一下springmvc中如何和前台交互json数据。 1. 两种交互形式  springmvc和前台交互主要有两种形式,如下图所示: 可以看出,前台传过来的方式有两种,一种是传json格式的数据过来,另一种

关于JSON的一些总结

一、关于JSON Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率. 从结构上看,所有的数据(data)最终都可以分解成三种类型:  第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。  第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列