文档章节

Go JSON 转化规则

o
 osc_n6euf5h6
发布于 2019/03/20 00:50
字数 380
阅读 0
收藏 0

精选30+云产品,助力企业轻松上云!>>>

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)
          }
        }
      }
    }
  }
}
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
JSON入门基础知识

JSON入门基础 1、JSON定义 JSON:JavaScript 对象表示法(JavaScript Object Notation)。 JSON 是存储和交换文本信息的语法。类似 XML。 JSON 比 XML 更小、更快,更易解析 2、JSON语法规则...

算法新目标
2015/03/29
28
0
django serializers

restful 编写规则,表征性状态转移。通过http协议将网上的实体通过get/post/put/delete进行操作。而传递实体,是通过json形式传递。 django+http协议 django自带的json格式转换json.dumps()将...

上善若水水善利万物而
2018/12/09
280
0
两个json的拼接

两个json格式的字符串拼接,直接上代码 String d="{"username1":"zhangsan","password1":"zhangsan"}"; 首先是通过JSONObject.fromObject()方法把字符串转化为json,然后新建一个json,把两个......

osc_j89isia8
2019/10/25
2
0
移动程序的开发平台--Worklight

Worklight(以下简称 WL)作为一个移动程序的开发平台,通过三种模式(Web、混合、本地)支持了不同需求的客户端开发,但是面临的一个现实问题是如何和已有的系统进行良好 的集成。适配器(a...

匿名
2012/06/18
5.4K
1
jquery中的ajax(用户登录)

用jquery就要先引入jquery文件 jquery中的ajax格式: $.ajax({ url:'请求地址', type:'请求的方式', data:'要求发送给服务器的值', dataType:'要求服务器返回的数据类型', async:'请求是否异......

osc_y77zjayt
2019/12/29
3
0

没有更多内容

加载失败,请刷新页面

加载更多

django框架效率

1. django ORM模式提供食物处理类:transaction.Django默认的事务处理方式时改动就提交,每执行一次就立即提交,这就会花费大量的时间用于IO。Django也支持所有工作都完成后才提交事务这种方...

osc_2clpynvs
10分钟前
0
0
Qt编写安防视频监控系统34-onvif事件订阅

一、前言 事件订阅是近期增加的功能,主要是因为遇到越来越多的一个应用场景,能够接收摄像机的报警事件,比如几乎所有的摄像机后面会增加报警输入输出接口,如果用户外接了报警输入,则当触...

飞扬青云
11分钟前
10
0
springboot应用docker部署调用phantomjs出现permission denied修复方法

1. 最近项目中需要对网页生成图片 通过调研发现 phantomjs 转换保真度最好,兼容性不错。因此选择了它。但是在打包作镜像时发现调用 phantomjs 不成功,进入镜像直接使用命令 phantomjs -v 查...

osc_5emtajt2
11分钟前
0
0
Python 实现 T00ls 自动签到脚本(邮件+钉钉通知)

T00ls 每日签到是可以获取 TuBi 的,由于常常忘记签到,导致损失了很多 TuBi 。于是在 T00ls 论坛搜索了一下,发现有不少大佬都写了自己的签到脚本,签到功能实现、定时任务执行以及签到提醒...

osc_w9jimlm8
12分钟前
6
0
springboot~集成elasticsearch的jest

jest是一批操作es的http api接口,你可以像使用普法方法一下操作es,在springboot2.3.0之前,JestClient是支持自动注入的,而在2.3.0之后,你必须为JestClient写一个组件类,通过注入组件类来...

osc_qo2uprmb
14分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部