Go 中 JSON 的序列化和反序列化

Wesley13
• 阅读 925

golang中对json的序列化/反序列化操作还是比较容易的,
序列化操作主要是通过encoding/json包的Marshal()方法来实现,
反序列化操作主要是通过encoding/json包的Unmarshal()方法来实现.

//JSON序列化和反序列化

//可用在api序列化输出
//转成结构体,方便程序操作等

package main

import (
    "encoding/json"
    "fmt"
)

type Response1 struct {
    Page   int
    Fruits []string
}

type Response2 struct {
    Page   int      `json:"page"`
    Fruits []string `json:"fruits"`
}

func main() {

    //布尔型
    boolByte, _ := json.Marshal(true)
    fmt.Println(string(boolByte))

    //整数型
    intByte, _ := json.Marshal(100)
    fmt.Println(string(intByte))

    //浮点型
    floatByte, _ := json.Marshal(1.23456)
    fmt.Println(string(floatByte))

    //字符串
    stringByte, _ := json.Marshal("字符串啊啊啊")
    fmt.Println(string(stringByte))

    //切片
    sliceByte, _ := json.Marshal([]string{"apple", "orange", "banana"})
    fmt.Println(string(sliceByte))

    //字典
    mapByte, _ := json.Marshal(map[string]int{"apple": 5, "orange": 6, "banana": 7})
    fmt.Println(string(mapByte))

    //自定义类型1
    customsByte1, _ := json.Marshal(&Response1{Page: 1, Fruits: []string{"apple", "orange", "banana"}})
    fmt.Println(string(customsByte1))

    //自定义类型2,tag语法
    customsByte2, _ := json.Marshal(&Response2{Page: 2, Fruits: []string{"apple", "orange", "banana"}})
    fmt.Println(string(customsByte2))

    //反序列化到结构体
    json1 := `{"Page":1,"Fruits":["apple","orange","banana"]}`
    json2 := `{"page":2,"fruits":["apple","orange","banana"]}`
    response1 := Response1{}
    response2 := Response2{}
    json.Unmarshal([]byte(json1), &response1)
    fmt.Println(response1)
    json.Unmarshal([]byte(json2), &response2)
    fmt.Println(response2)
}
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java中的序列化方式及dubbo使用kryo序列化
java中的序列化方式:1\.自带序列化 ObjectInputSteam、ObjectOutStream等2\.hession23\.json,xml等格式4.kryo5.FST\dubbo直接多种序列化方式,默认是hession2.比较成熟,但是效率略低。可以配置使用kryo  <dubbo:
Wesley13 Wesley13
3年前
FastJson、Jackson、Gson进行Java对象转换Json的细节处理
Java对象转换Json的细节处理前言Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式一、fastJson1、fastJson在转换java对象为json的时候,默认是不序列化nu
Stella981 Stella981
3年前
C# JToken类的使用,实现解析动态json数据、遍历、查找
在原来解析json数据是,一般都是用反序列化来实现json数据的解读,这需要首先知道json数据的结构并且建立相应的类才能反序列化,一旦遇到动态的json数据,这种方法就不使用。为了解决动态解析json数据,微软有个Newtonsoft.Json封装类十分好用,里面的JToken直接实现ling查询。将json字符串解析为JToken,
Stella981 Stella981
3年前
Json解析工具 @JsonIgnore 注解的使用
@JsonIgnoreProperties        此注解是类注解,作用是json序列化时将javabean中的一些属性忽略掉,序列化和反序列化都受影响。@JsonIgnore        此注解用于属性或者方法上(最好是属性上),作用和上面的@JsonIgnoreProperties一样。@JsonFo
Stella981 Stella981
3年前
Fastjson API Stream使用说明
FastjsonAPIStreamFastjson当需要处理超大JSON文本时,需要StreamAPI,在fastjson1.1.32版本中开始提供StreamAPI。如何序列化超大JSON数组序列化如果你的JSON格式是一个巨大的JSON数组,有很多元素,
Stella981 Stella981
3年前
Django 前台通过json 取出后台数据
前台通过json取出后台数据步骤1:后台数据通过JSON序列化成字符串注意:1、json是1个字符串     2、通过json.dumps('xxx')序列化成1个字符串的 '字典对象' views.pydefajax(request):ifrequest.
Stella981 Stella981
3年前
AspNetCore Json序列化设置
AspNetCore中的Json序列化处理已经默认使用_Newtonsoft.Json_库了...比如像MVC中:publicI不过使用过程中会发现一些问题,其实这算默认设置吧:Json序列化后的字段格式会变成小驼峰形式Json序列化时的日期时间格式化没有处理循环引用的问题,比如EntityF
Stella981 Stella981
3年前
JFinal的Model进行json反序列化
在使用JFinal进行开发时,我们可能会需要解决这样的问题:Model进行json的序列化与反序列化。官方已经提供了序列化的方法Model.toJson()非常方便,反序列化就得自己实现一下了。之前我一直都是把Model序列化成的json字符串,反序列化成map,然后再调用Model.setAttrs(map)。这样就有类型转换问题,最后反序列化得到
Stella981 Stella981
3年前
Redis序列化操作工具
以往使用memcached。对于任意缓存的使用操作。而今喜欢Redis。很多小伙伴用redis直接用字符串、json进行对象存储,然而序列化比较通用且性能高于json。 故此,封装了一个redis序列化操作工具,希望对小伙伴们有用。packagecom.app.server.common.cache;importj
Stella981 Stella981
3年前
FastJson 反序列化注意事项
问题描述使用fastJson对json字符串进行反序列化时,有几个点需要注意一下:反序列化内部类反序列化模板类0\.Getter/Setter问题如我们希望返回的一个json串为"name":"name","isDeleted":true,"isEmpty":1