/**
* @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

最新文章

  1. chattr用法
  2. iframe的sandbox使用
  3. Oracle ITL(Interested Transaction List)理解
  4. win7 64位4GB内存下 tomcat7扩大内存
  5. Java 经典实例: Unicode字符和String之间的转换
  6. Delphi中exit、break、continue等跳出操作的区别
  7. IIS调试技巧
  8. HealthKit开发快速入门教程之HealthKit数据的操作
  9. innodb_strict_mode
  10. 机器人学 —— 机器人感知(Gaussian Model)
  11. Hibernate缓存杂谈
  12. webBrowser 参数设置
  13. MyBB 18 SQL Injection Vulnerability
  14. org.apache.http.client.ClientProtocolException: URI does not specify a valid host name
  15. offset系列、scroll系列与client系列
  16. Metasploit Framework(6)客户端渗透(上)
  17. Android TextView自动换行、排列错乱问题及解决
  18. RabbitMQ五种消息队列学习(三)–Work模式
  19. Java使用SFTP和FTP两种连接方式实现对服务器的上传下载 【我改】
  20. oracle查看锁表进程,杀掉锁表进程[转载]

热门文章

  1. C#泛型集合之——哈希集合
  2. Thymeleaf前后端分页查询
  3. python安装和pycharm安装与笔记
  4. Spring通过注解@Autowired/@Resource获取bean实例时为什么可以直接获取接口而不是注入的类
  5. Function.prototype.call.apply作用详解
  6. php长连接应用
  7. JS基础理论相关知识
  8. redux核心知识
  9. Java -- springboot 配置 freemarker
  10. Synchronized可重入锁通俗易懂的简单分析