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化,前台只处理需要的属性,多余 ...
随机推荐
- C# 编译运行原理
- postgresql drop表后空间不释放
数据库执行drop table XXX后,查看du -sh 已下降,但df -h /pgdb没有减少,是有还有进程使用对应的文件句柄 1.通过表名确认文件ID select pg_relation_f ...
- nginx配置负载均衡
本教程不讲解nginx的安装,若安装请看博客 http://www.cnblogs.com/hqjy/p/8092983.html 本教程不讲解tomcat的安装,若安装请看博客 http://www ...
- java PDF分页打印
将获取的pdf文件按页拆分:参考https://q.cnblogs.com/q/99944/ pdf文件有多页,第一页需设置横向打印,其他页设置为纵向打印. PDDocument document = ...
- CF987B - High School: Become Human
Year 2118. Androids are in mass production for decades now, and they do all the work for humans. But ...
- python3.X中try/except
包含try...except...在3.x版本中与2.x版本中的用法差异. 1.先说差异: 在2.x的python中用法实例: try: ...... except Exception,e: rais ...
- SQL注入——知表名不知列明情景下查询数据
场景 有某些情况,可以查找到表名,但查找不到列名. MySQL < 5 或 web过滤 information_scema 详解 select `1` from (select 1,2,3,4, ...
- Sightseeing trip POJ - 1734 -Floyd 最小环
POJ - 1734 思路 : Floyd 实质 dp ,优化掉了第三维. dp [ i ] [ j ] [ k ] 指的是前k个点优化后 i -> j 的最短路. 所以我们就可以 ...
- 【nuget】PackageReference
.net 爬虫 <PackageReference Include="HtmlAgilityPack" Version="1.9.0" /> < ...
- Android与ios 在input上的差异
input{ -webkit-appearance:none; }