分享
  1. 首页
  2. 文章

Go struct 2 json

痞子汤 · · 1565 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

// struct2json project main.go
package main
import (
	"encoding/json"
	"fmt"
)
type Book struct {
	Title string
	Authors []string
	Publisher string
	IsPublished bool
	Price float32
}
func main() {
	gobook := Book{
		Title: "Go 语言编程",
		Authors: []string{"XuShiwei", "HughLv", "XuDaoli"},
		Publisher: "ituring.com.cn",
		IsPublished: true,
		Price: 9.99,
	}
	b, err := json.Marshal(gobook)
	if err == nil {
		fmt.Println("json = ", string(b))
	} else {
		fmt.Println("json.Marshal err : ", err.Error())
	}
}

输出:

json = {"Title":"Go 语言编程","Authors":["XuShiwei","HughLv","XuDaoli"],"Publisher":"ituring.com.cn","IsPublished":true,"Price":9.99}
在Go中, JSON转化前后的数据类型映射如下。
 布尔值转化为JSON后还是布尔类型。
 浮点数和整型会被转化为JSON里边的常规数字。
 字符串将以UTF-8编码转化输出为Unicode字符集的字符串,特殊字符比如<将会被转义为
\u003c。
 数组和切片会转化为JSON里边的数组,但[]byte类型的值将会被转化为 Base64 编码后
的字符串, slice类型的零值会被转化为 null。
 结构体会转化为JSON对象,并且只有结构体里边以大写字母开头的可被导出的字段才会
被转化输出,而这些可导出的字段会作为JSON对象的字符串索引。
 转化一个map类型的数据结构时,该数据的类型必须是 map[string]T(T可以是
encoding/json 包支持的任意数据类型)

// 字段输出

type Book struct {
	Title string
	Authors []string
	Publisher string
	IsPublished bool
	Price float32
}
func (b *Book) String() string {
	return fmt.Sprintf("Title = %s, \nAuthors = %v, \nPublisher = %s, \nIsPublished=%t, \nPrice = %g", b.Title, b.Authors, b.Publisher, b.IsPublished,
		b.Price)
}
/*
 fmt.Println(gobook.String())
*/

https://golang.org/pkg/fmt/


有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:痞子汤

查看原文:Go struct 2 json

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1565 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏