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化,前台只处理需要的属性,多余 ...
随机推荐
- android新窗口以及传值
1,新建一个activity,如Activity2,在清单文件AndroidManifest.xml 中 application节点中 增加一个新窗体: ................. </ ...
- Emsemble
RM # -*- coding: utf-8 -*- """ RandomForestClassifier 예 """ import pan ...
- 在ideaUI中建立maven项目
1.新建New 注意:第一次创建maven项目需要在有网情况下进行 2.可以看见我们建立的项目了
- 使用Kazoo操作ZooKeeper服务治理
单机服务的可靠性及可扩展性有限,某台服务宕机可能会影响整个系统的正常使用:分布式服务能够有效地解决这一问题,但同时分布式服务也会带来一些新的问题,如:服务发现(新增或者删除了服务如何确保能让客户端知道 ...
- SQL ServerAlways Encrypted Data
SQL Server 提供了一个加密表上字段的功能, Encrypt Columns , 比如身份证号码,手机号码,银行账户等等敏感信息.
- HeadDoc自动注释语法
记录于2013/4/23: 关于HeaderDoc注释和标签的简要介绍 每个HeaderDoc注释可分为顶级标签和第二级标签: (1)顶级标签:宣布API的声明类型 (function, struct ...
- 1.3 正则表达式和python语言-1.3.8 创建字符集([ ])
1.3.8 创建字符集([ ]) (2018-05-0815:24:00) 下面的示例将说明对于 r2d2|c3po 的限制将比[cr][23][dp][o2]更为严格 import re # 下面的 ...
- 解决win10 报错 git pull error: cannot open .git/FETCH_HEAD: Permission denied
sh配置git 用户解决了 git config --list //查看当前的config配置 git config --global user.name "youruser" / ...
- JOISC2019 游记
JOISC2019 游记 Day 1: 試験 (Examination) 题目大意: 有\(n(n\le10^5)\)个人,每个人有两种属性\(s_i,t_i\).\(q(q\le10^5)\)次询问 ...
- [CF1093E]Intersection of Permutations
[CF1093E]Intersection of Permutations 题目大意: 给定两个长度为\(n(n\le2\times10^5)\)的排列\(A,B\).\(m(m\le2\times1 ...