Go JSON 转化规则
Go语言内置encoding/json包支持JSON序列化和反序列化,有如下转换规则
- 基本的数据结构映射关系
bool, for JSON booleans
float64, for JSON numbers
string, for JSON strings
[]interface{}, for JSON arrays
map[string]interface{}, for JSON objects
nil for JSON null
- 当有指针出现在数据结构中时,会转换成指针所指的值。
- chanel,complex和函数不能转化为有效的JSON文本
- JSON序列化时,需要定义一个struct结构,支持json tag来扩展功能, 对于未知的json数据结构,支持interface{}作为接收容器
type Computer struct {
Brand string
// -:不要解析这个字段
Name string `json: "-"`
// omitempty: 字段为0值时,不要解析
Price float32 `json: "omitempty"`
// 可以替换的字段
IsSupportAntCreditPay bool `json: "huabei,omitempty"`
HardwareConfiguration []string
}
func NewDecoder(r io.Reader) *Decoder
func NewEncoder(w io.Writer) *Encoder
实例
package main
import (
"fmt"
"encoding/json"
)
type Computer struct {
Brand string
Name string
Price float64
// 可以替换的字段
IsSupportAntCreditPay bool `json: "huabei`
HardwareConfiguration []string
}
func main() {
hc := []string{"RTX2080Ti", "i9-9900k", "32G", "DDR4 XMP", "512G SSD"}
alienware := Computer {
Brand: "Alienware",
Name: "外星人ALWS-R4968S",
Price: 0,
IsSupportAntCreditPay:false,
HardwareConfiguration: hc}
if b, err := json.Marshal(alienware); err !=nil {
return
} else {
fmt.Println(b)
fmt.Println()
var computer Computer
b := []byte(`{
"Brand": "Alienware",
"Name": "外星人ALWS-R4968S",
"Price": 0.0,
"huabei": "true",
"HardwareConfiguration": ["i7-8700K", "GTX 1080Ti"]
}`)
if err:= json.Unmarshal(b, &computer); err == nil {
fmt.Println(computer)
fmt.Println()
} else {
fmt.Println(err)
fmt.Println()
}
var unknowJson interface{}
if err:= json.Unmarshal(b, &unknowJson); err == nil {
unknowJson, ok := unknowJson.(map[string]interface{})
if ok {
for k, v := range unknowJson {
switch t := v.(type) {
case string:
fmt.Println("string:", k, " ", v)
case float64:
fmt.Println("float:", k, " ", v)
case bool:
fmt.Println("bool:", k, " ", v)
case []interface{}:
fmt.Println(k, "is an array:")
for i, iv := range t {
fmt.Println(i, iv)
}
default:
fmt.Println("unknow type:", k)
}
}
}
}
}
}
Go JSON 转化规则的更多相关文章
- JSON语法规则
JSON 语法规则 JSON 语法是 JavaScript 对象表示法语法的子集. 数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 JSON 名称/值对 JSON 数据的书写格式是 ...
- at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) :json转化“$ref 循环引用”的问题
原因: entity实体中存在@OneToMany,@ManyToOne注解,在转化json是产生了循环引用 报的错误 解决方法: springmvc @ResponseBody 默认的json转化用 ...
- 1.4.1 对象与JSON转化 1.4.2 JSON与List集合转化 1.1.1 获取json中的属性 day10-05
1.1.1 对象与JSON转化 @Test public void toJSON() throws IOException{ Jedis jedis = new Jedis("192.168 ...
- JsonResult类设置返回json的长度(工作笔记 json转化出错)
public JsonResult PoundageReportSearch() { JsonResult jr = new JsonResult(); // 实例 ...
- json 转化
1. 把java 对象列表转换为json对象数组,并转为字符串 复制代码代码如下: JSONArray array = JSONArray.fromObject(userlist); S ...
- JSON 语法规则详解
JSON 的语法规则十分简单,无论用何种方法总结都只有数条而已,它参考了 C 语言家族的一些习惯,学习起来并不会感到陌生. 回顾JSON 的五点语法 1)- 数组(Array)用方括号("[ ...
- Android中关于List与Json转化问题
比如 List<String>list=new ArrayList<String>(); list.add("test1"); list.add(" ...
- 在Python中进行JSON转化
序列化,指的是把内存中的变量(如类的实例)变成可存储或可传输的过程. JSON(JavaScript Object Notation, JavaScript对象表示)是网络传输中经常使用的一种数据形式 ...
- C#中如何实现json转化时只处理部分属性
把对象转化为json字符串,很常用,但如果因为现在大部分项目都是用了ORM映射,导致一个对象的属性特别多,如果前台只需要部分属性如何实现? 当然最简单是所有属性都json化,前台只处理需要的属性,多余 ...
随机推荐
- PHP实现url参数组合字符串与数组相互转换
$data = array( 'name' => 'tom', 'sex' => 1, 'channel' => 'ty' ); 数组转url参数字符串 $queryStr = ht ...
- Scrapy 隐含 bug: 强制关闭爬虫后从 requests.queue 读取的已保存 request 数量可能有误
问题描述和解决方案已提交至 Scrapy issues: The size of requests.queue may be wrong when resuming crawl from unclea ...
- tensorflow保存读取-【老鱼学tensorflow】
当我们对模型进行了训练后,就需要把模型保存起来,便于在预测时直接用已经训练好的模型进行预测. 保存模型的权重和偏置值 假设我们已经训练好了模型,其中有关于weights和biases的值,例如: im ...
- 咸鱼入门到放弃11--Servlet+JSP+JavaBean开发模式
本篇搬运了大佬blog:https://www.cnblogs.com/xdp-gacl/p/3902537.html 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servle ...
- 机器学习入门之sklearn介绍
SKlearn简介 scikit-learn,又写作sklearn,是一个开源的基于python语言的机器学习工具包.它通过NumPy, SciPy和Matplotlib等python数值计算的库实现 ...
- Shell脚本学习 - 流程控制和函数
继续Shell的学习.上两篇是关于基本数据类型,基本语法以及运算符相关,这一篇是流程控制相关(if, for, while) 流程控制 if else 流程控制不可为空,如果else没有语句执行,就不 ...
- 使用snap
snap是一个Linux上的包管理器,其目的是提供跨平台的包管理 提到包管理我们会想到python的 pip conda等,以及 apt等等 snap提供了一个 统一的体验在各种Linux发行版上 关 ...
- vue中使用stylus
1.创建完成一个初始项目后,通过 npm install stylus -D命令,在项目内安装stylus.(注意:命令结尾 -D 即是 --save-dev 的简写形式) 2.需要安装loader, ...
- 快速幂 ,快速幂优化,矩形快速幂(java)
快速幂形式 public static int f(int a,int b,int c){ int ans =1; int base=a; while(b!=0){ if((b&1)!=0) ...
- hashlib模块,shutil,模块 ,,xml 文件解析,configparser,模块,类,什么是类
1 什么是hash hash是一种算法,该算法接受传入的内容,经过运算得到一串hash值 如果把hash算法比喻为一座工厂 那传给hash算法的内容就是原材料 生成的hash值就是生产出的产品 2.为 ...