Go-Json操作
/**
* @Author: jadeshu
* @Description:
* @File: main
* @Version: 1.0.0
* @Date: 2019/11/7 2:33
*/
package main
import (
"encoding/json"
"fmt"
)
// 输出json 结构体中字段首字母必须大写
type person struct {
//tag JSON中头字母变小写
Name string `json:"name"`
Age int `json:"age"`
add int
// tag 此字段bool类型转换为字符串输出
Sex bool `json:",string"`
// tag 此字段不会显示输出
Sub []string `json:"-"`
}
func main() {
p := person{"jadeshu", 1, 20, false, []string{"type1", "type2", "type3"}}
//bytes, e := json.Marshal(p)
// 格式化输出 方便查看
bytes, e := json.MarshalIndent(p, "", " ")
if e != nil {
fmt.Println(e.Error())
return
}
fmt.Println(string(bytes))
// end
// ========通过map生成json文件
// key:string val:任意类型
m := make(map[string]interface{}, 10)
m["name"] = "jadeshu"
m["age"] = 12
m["type"] = [3]string{"type1", "type2", "type3"}
// 编码成JSON
marshal, e := json.Marshal(m)
if e != nil {
fmt.Println(e.Error())
return
}
fmt.Println(string(marshal))
// end
// JSON解析到结构体中
jbuf := `{
"first_name":"John",
"last_name":"Doe",
"age":20
}`
type pName struct {
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
Age int `json:"age"`
}
var p1 pName
json.Unmarshal([]byte(jbuf), &p1)
fmt.Println(p1)
// end
// 只想读取JSON文件中的一个字段
type pNamePart struct {
LastName string `json:"last_name"`
}
var pPart pNamePart
// 第二参数必须是指针
json.Unmarshal([]byte(jbuf), &pPart) //传地址
fmt.Println(pPart)
// end
// JSON解析到map中
jmap := make(map[string]interface{}, 10)
json.Unmarshal([]byte(jbuf), &jmap) //传地址
fmt.Println(jmap)
// end
// 类型断言 判断
for key, val := range jmap {
switch data := val.(type) {
case string:
fmt.Println("读取到字符串:", key, "--", data)
case int:
fmt.Println("读取到整数型:", key, "--", data)
case float64:
// 读取json转换为MAP后,整数变为浮点数
fmt.Println("读取到float64型:", key, "--", data)
}
}
}
运行结果:
{
"name": "jadeshu",
"age": 1,
"Sex": "false"
}
{"age":12,"name":"jadeshu","type":["type1","type2","type3"]}
{John Doe 20}
{Doe}
map[age:20 first_name:John last_name:Doe]
读取到字符串: first_name -- John
读取到字符串: last_name -- Doe
读取到float32型: age -- 20
所有JSON数值类型一律解析为float64类型,需手动转换;对于map类型需判断是否为nil再转换为所需类型。
interface{}类型在json.Unmarshal时,会自动将JSON转换为对应的数据类型:
JSON的boolean 转换为bool
JSON的数值 转换为float64
JSON的字符串 转换为string
JSON的Array 转换为[]interface{}
JSON的Object 转换为map[string]interface{},也可以转为本身类型
JSON的null 转换为nil
Go-Json操作的更多相关文章
- Json操作(DynamicJson)
Json的简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了 ...
- ASP.NET 里的 JSON操作
最近项目中需要用到 JSON操作,google了一下 找到了几个比较好的操作方法.... 一 .使用 mircosoft 提供的 .NET Framework 自带的 json操作方法 1. 使用Ja ...
- Newtonsoft.Json 操作 JSON 字符串
Newtonsoft.Json介绍 在做开发的时候,很多数据交换都是以json格式传输的.而使用Json的时候,我们很多时候会涉及到几个序列化对象的使用:DataContractJsonSeriali ...
- Asp.Net Core 2.0 项目实战(8)Core下缓存操作、序列化操作、JSON操作等Helper集合类
本文目录 1. 前沿 2.CacheHelper基于Microsoft.Extensions.Caching.Memory封装 3.XmlHelper快速操作xml文档 4.Serializatio ...
- JavaScript对json操作小记
JSON是一种轻量级的数据交换格式,同时,JSON是 JavaScript 原生格式,因此我们可以直接处理它不需要依赖任何工具包或者插件.因此,好多后台都会选择返回给前端这种非常友好的数据格式. 引子 ...
- 微信小程序setData()方法的详解以及对数组/json操作
此篇文章是本人对setData方法的一些理解,是查阅文档和查找一些其他资料综述的,有所不足希望指正! 直接进入正题! 一.setData()方法: 1.参数接受一个对象,以key,value的形式表示 ...
- C#工具类:Json操作帮助类(转载)
原文转载自C#工具类:Json操作帮助类_IT技术小趣屋. Json序列化和反序列化在程序开发中时常会遇到,在C#中可以使用很多种方法实现对数据的Json序列化和反序列化,封装一个Json操作工具类来 ...
- 【转载】C#工具类:Json操作帮助类
Json序列化和反序列化在程序开发中时常会遇到,在C#中可以使用很多种方法实现对数据的Json序列化和反序列化,封装一个Json操作工具类来简化相应的操作,该工具类中包含以下功能:对象转JSON.数据 ...
- 【转】python 历险记(四)— python 中常用的 json 操作
[转]python 历险记(四)— python 中常用的 json 操作 目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编 ...
- python 历险记(四)— python 中常用的 json 操作
目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编码和解码? 常用的 json 操作有哪些? json 操作需要什么库? 如何 ...
随机推荐
- java之spring mvc之拦截器
1. springmvc 中的拦截器是由实现 HandlerInterceptor 或者继承 HandlerInterceptorAdapter 来实现的. 2. 自定义实现一个拦截器的步骤: a). ...
- RHEL6搭建网络yum源软件仓库
RHEL的更新包只对注册用户生效,所以需要自己手动改成Centos的更新包 一.查看rhel本身的yum安装包 rpm -qa | grep yum 二.卸载这些软件包 rpm -qa | grep ...
- 安装VMware14可能出现的问题
未能提取文件 安装程序未能提取安装vmware workstation所必须的文件 在没有关闭这个弹框的前提下,Win+R输入%temp%,找到以~setup结尾的文件夹,双击下面的临时文件VMwar ...
- iOS之集成GoogleMap定位、搜索注意事项
简介: 最近花了些时间看了GoogleMap官方文件并集成到国际版app中,网上关于GoogleMap for iOS的讲解相对Android来说少一点,比较有帮助的几乎全是英文文档.下面是我开发过程 ...
- 记录axios在IOS上不能发送的问题
最近 遇到 了axios在IOS上无法发送的问题,测试 了两个 苹果 机,IOS10上不能发送,IOS12可以,百度了下,找到了解决方法.记录下吧 首先引入qs,这个安装axios也已经有了吧:然后在 ...
- PcAnywhere用法
安装软件 配置被控端 点击"主机",点击"添加" 可以使用"现有的Windows账户",也可以创建新的"用户名和密码" ...
- C语言判断字符串是否是 hex string的代码
把写内容过程中经常用到的一些内容段备份一下,如下内容内容是关于C语言判断字符串是否是 hex string的内容. { static unsigned int hex2bin[256]={0}; me ...
- python测试开发django-43.xadmin添加小组件报错解决
前言 xadmin首页上有个添加小组件按钮,打开的时候会报错“render() got an unexpected keyword argument 'renderer'”环境:python3.6dj ...
- Docker 安装HDFS
网上拉取Docker模板,使用singlarities/hadoop镜像 [root@localhost /]# docker pull singularities/hadoop 查看: [root@ ...
- Python包模块化调用方式详解
Python包模块化调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一般来说,编程语言中,库.包.模块是同一种概念,是代码组织方式. Python中只有一种模块对象类型 ...