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化,前台只处理需要的属性,多余 ...
随机推荐
- UOJ#104. 【APIO2014】Split the sequence 动态规划 斜率优化
原文链接www.cnblogs.com/zhouzhendong/p/UOJ104.html 题解 首先证明一个结论:对于一种分割方案,分割的顺序不影响最终结果. 证明:对于树 a[x] 和 a[y] ...
- 史上最全的select加锁分析(Mysql)
引言 大家在面试中有没遇到面试官问你下面六句Sql的区别呢 select * from table where id = ? select * from table where id < ? s ...
- Scrapy:Python实现scrapy框架爬虫两个网址下载网页内容信息——Jason niu
import scrapy class DmozSpider(scrapy.Spider): name ="dmoz" allowed_domains = ["dmoz. ...
- vs2013下配置x64版c++
最近在ddctf的比赛遇到了x64版的逆向,一大堆寄存器调试的头昏,然后比赛结束后在自己电脑上配置下x64版的c++环境记录下: 首先我们需要新建项目不再废话,然后选择:debug->配置管理器 ...
- Unity Rain Ai 插件基本使用(二)
前言 在前面的教程中我们已经基本实现了路径导航和障碍物规避. 但是这样我们并没有让我们的角色学会思考,他只是机械的去完成一些步骤,这并不能体现Rain插件的智能. 一个角色他应该有多个不同的状态,待机 ...
- hdu1814 Peaceful Commission
hdu1814 Peaceful Commission 题意:2-sat裸题,打印字典序最小的 我写了三个 染色做法,正解 scc做法,不管字典序 scc做法,错误的字典序贪心 #include &l ...
- [R]R包版本更迭【持续更新】
由于R版本更迭,网上或旧的教材上的包可能没有在维护,或者被其他包替代. 做一个表记录碰到的一些替代方案.个人向,非完整指南. * mvpart 2014年之后不再更新,R 3.0版本后无法安装, 提示 ...
- jQuery(三)
jquery链式调用 jquery对象的方法会在执行完后返回这个jquery对象,所有jquery对象的方法可以连起来写: $('#div1') // id为div1的元素 .children('ul ...
- 虚拟机安装Linux系统
Mware Workstation 12 序列号: 5A02H-AU243-TZJ49-GTC7K-3C61N 步骤一: 右键-->新建虚拟机 步骤二:自定义(高级)-->下一步 步骤三: ...
- js判断pc还是移动端
if (!/windows phone|iphone|android/ig.test(window.navigator.userAgent)) { //pc }else{ //h5 }