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

相关文章

如何在Java中处理JSON数据?

如何在Java中处理JSON数据? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨在Java中如何处理JSON数据。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,在现代应用程序中被广泛使用。Java通过多种库和API提供了处理JSON的能力,我们将深入了解其用法和最佳

直接得到Json串,转换为字典

0.新创建一个json文件,把json串拷贝到里面 1.先通过MainBundle找到资源对应的路径 2.将文件转换为NSData 3.通过NSJSonSerization得到字典 NSString*fileName=[[NSBundle mainBundle] pathForResource:@"myJson" ofType:@"json"];           NS

php json_encode 大括号中括号

当array是一个从0开始的连续数组时,json_encode出来的结果是一个由[]括起来的字符串。 而当array是不从0开始或者不连续的数组时,json_encode出来的结果是一个由{}括起来的key-value模式的字符串。 当字符串为[1,1,1] 这种模式时,json_decode默认解析出来的结果是一个数组。 当字符串为{"1":1,"2":1} 这种模式时,json_

在Qt5中创建、读取和写入JSON文件的完整指南

Qt5 提供了一个非常方便的JSON解析器,使得在C++中处理JSON数据变得非常简单。本文将详细介绍如何在Qt5中创建、读取和写入JSON文件。 读取JSON文件的示例 假设我们有一个名为test.json的JSON文件,内容如下: {"appDesc": {"description": "SomeDescription","message": "SomeMessage"},"appNam

玩转Web之Json(四)---json与(Object/List/Map)的相互转化

在做web应用时,经常需要将json转化成Object/list/map或者将Object/List/map转化成json,通过简单封装可以在写代码是减轻很多负担。本文将给出json转化的一系列方法。 闲话不 多说,直接上代码: 先是Object /List /Map转化为Json /* 功能 :将一个对象转成json数组* 参数 :object对象* retu

玩转Web之Json(三)-----easy ui怎么把前台显示的dataGird中的所有数据序列化为json,返回到后台并解析

最近做一个项目时,需要在dataGird中插入<input>,即文本输入框,当点击提交时,需要把文本框里填的数据返以及其他列的一些信息以json数组的格式返回到后台,虽然我实现了该功能,但一直没找到简便的方法,今天终于在一位版主的点拨下找到了非常简单的方法。   var all = $("#dg").datagrid("getData");var json =JSON.

双层嵌套json字符串(即json对象内嵌json数组)解析为Map

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。 之前我层写过一篇文章,介绍了json与map的相互转化,但当时只涉及到单一的json对象或json数组,对json对象内嵌套这json数组的json字符串无法处理,这篇文章主要解决这个问题。 之前的那篇文章址:http://blo

python | rapidjson,一个实用的 提高JSON处理效率 Python 库!

本文来源公众号“python”,仅用于学术分享,侵权删,干货满满。 原文链接:rapidjson,一个实用的 Python 库! 大家好,今天为大家分享一个实用的 Python 库 - rapidjson。 Github地址:https://github.com/python-rapidjson/python-rapidjson 在现代应用程序开发中,JSON(JavaScript Obj

json在项目中的应用大总结

webservice天气预报  是json的格式 一、摘要    刚开始接触json的时候,那时候还不太清楚json到底是个什么东西,然后就在项目中使用了它。因为没有搞明白json的本质,所以刚开始使用json的时候走了不少弯路。这次总结一些json的知识,总结主要是想梳理一下自己使用json的一些应用场景,让自己对json有一个更深刻的认识,以后在项目中可以更加熟练的应用它。

【json】json对象和json数组的操作

1、json 的形式 json对象: {"name": "wlm", "age": "21", "sex": "male"} json数组: [ {"name": "wlm", "age": "21"}, {"name": "zhangsan", "22"}, {"name": "lisi", "age": "20"}] 2、对json对象进行操作 $(f