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 转化规则的更多相关文章

  1. JSON语法规则

    JSON 语法规则 JSON 语法是 JavaScript 对象表示法语法的子集. 数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 JSON 名称/值对 JSON 数据的书写格式是 ...

  2. at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) :json转化“$ref 循环引用”的问题

    原因: entity实体中存在@OneToMany,@ManyToOne注解,在转化json是产生了循环引用 报的错误 解决方法: springmvc @ResponseBody 默认的json转化用 ...

  3. 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 ...

  4. JsonResult类设置返回json的长度(工作笔记 json转化出错)

    public JsonResult PoundageReportSearch()         {    JsonResult jr = new JsonResult();        // 实例 ...

  5. json 转化

    1. 把java 对象列表转换为json对象数组,并转为字符串 复制代码代码如下:     JSONArray array = JSONArray.fromObject(userlist);    S ...

  6. JSON 语法规则详解

    JSON 的语法规则十分简单,无论用何种方法总结都只有数条而已,它参考了 C 语言家族的一些习惯,学习起来并不会感到陌生. 回顾JSON 的五点语法 1)- 数组(Array)用方括号("[ ...

  7. Android中关于List与Json转化问题

    比如 List<String>list=new ArrayList<String>(); list.add("test1"); list.add(" ...

  8. 在Python中进行JSON转化

    序列化,指的是把内存中的变量(如类的实例)变成可存储或可传输的过程. JSON(JavaScript Object Notation, JavaScript对象表示)是网络传输中经常使用的一种数据形式 ...

  9. C#中如何实现json转化时只处理部分属性

    把对象转化为json字符串,很常用,但如果因为现在大部分项目都是用了ORM映射,导致一个对象的属性特别多,如果前台只需要部分属性如何实现? 当然最简单是所有属性都json化,前台只处理需要的属性,多余 ...

随机推荐

  1. C# 编译运行原理

  2. postgresql drop表后空间不释放

    数据库执行drop table XXX后,查看du -sh 已下降,但df -h /pgdb没有减少,是有还有进程使用对应的文件句柄 1.通过表名确认文件ID select pg_relation_f ...

  3. nginx配置负载均衡

    本教程不讲解nginx的安装,若安装请看博客 http://www.cnblogs.com/hqjy/p/8092983.html 本教程不讲解tomcat的安装,若安装请看博客 http://www ...

  4. java PDF分页打印

    将获取的pdf文件按页拆分:参考https://q.cnblogs.com/q/99944/ pdf文件有多页,第一页需设置横向打印,其他页设置为纵向打印. PDDocument document = ...

  5. CF987B - High School: Become Human

    Year 2118. Androids are in mass production for decades now, and they do all the work for humans. But ...

  6. python3.X中try/except

    包含try...except...在3.x版本中与2.x版本中的用法差异. 1.先说差异: 在2.x的python中用法实例: try: ...... except Exception,e: rais ...

  7. SQL注入——知表名不知列明情景下查询数据

    场景 有某些情况,可以查找到表名,但查找不到列名. MySQL < 5 或 web过滤 information_scema 详解 select `1` from (select 1,2,3,4, ...

  8. Sightseeing trip POJ - 1734 -Floyd 最小环

    POJ - 1734 思路 : Floyd 实质 dp ,优化掉了第三维. dp [ i ] [ j ] [ k ] 指的是前k个点优化后    i  ->  j   的最短路. 所以我们就可以 ...

  9. 【nuget】PackageReference

    .net 爬虫 <PackageReference Include="HtmlAgilityPack" Version="1.9.0" /> < ...

  10. Android与ios 在input上的差异

    input{ -webkit-appearance:none; }