博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GO JsonStr 2 obj
阅读量:6234 次
发布时间:2019-06-22

本文共 1897 字,大约阅读时间需要 6 分钟。

  hot3.png

//project main.gopackage mainimport (	"encoding/json"	"fmt")func main() {	fmt.Println(help())	b := []byte(`{					"Title": "Go语言编程",					"Authors": ["XuShiwei", "HughLv", "Pandaman", "GuaguaSong", "HanTuo", "BertYuan", "XuDaoli"],					"Publisher": "ituring.com.cn",					"IsPublished": true,					"Price": 9.99,					"Sales": 1000000				 }`)	var r interface{}	err := json.Unmarshal(b, &r)	fmt.Println("r = ", r, "err = ", err, "\n")	gobook, ok := r.(map[string]interface{})	if ok {		for k, v := range gobook {			switch v2 := v.(type) {			case string:				fmt.Println(k, "is string", v2)			case int:				fmt.Println(k, "is int", v2)			case bool:				fmt.Println(k, "is bool", v2)			case []interface{}:				fmt.Println(k, "is an array:")				for i, iv := range v2 {					fmt.Println(i, iv)				}			default:				fmt.Println(k, "is another type not handle yet")			}		}	}}func help() string {	return `	Go内建这样灵活的类型系统,向我们传达了一个很有价值的信息:空接口是通用类型。如	果要解码一段未知结构的JSON,只需将这段JSON数据解码输出到一个空接口即可。在解码JSON	数据的过程中, JSON数据里边的元素类型将做如下转换: 	JSON中的布尔值将会转换为Go中的bool类型; 	数值会被转换为Go中的float64类型; 	字符串转换后还是string类型; 	JSON数组会转换为[]interface{}类型; 	JSON对象会转换为map[string]interface{}类型; 	null值会转换为nil	`}

输出:

Go内建这样灵活的类型系统,向我们传达了一个很有价值的信息:空接口是通用类型。如	果要解码一段未知结构的JSON,只需将这段JSON数据解码输出到一个空接口即可。在解码JSON	数据的过程中, JSON数据里边的元素类型将做如下转换: 	JSON中的布尔值将会转换为Go中的bool类型; 	数值会被转换为Go中的float64类型; 	字符串转换后还是string类型; 	JSON数组会转换为[]interface{}类型; 	JSON对象会转换为map[string]interface{}类型; 	null值会转换为nil	r =  map[IsPublished:true Price:9.99 Sales:1e+06 Title:Go语言编程 Authors:[XuShiwei HughLv Pandaman GuaguaSong HanTuo BertYuan XuDaoli] Publisher:ituring.com.cn] err =  
Title is string Go语言编程Authors is an array:0 XuShiwei1 HughLv2 Pandaman3 GuaguaSong4 HanTuo5 BertYuan6 XuDaoliPublisher is string ituring.com.cnIsPublished is bool truePrice is another type not handle yetSales is another type not handle yet

 

转载于:https://my.oschina.net/tsh/blog/896964

你可能感兴趣的文章
架构设计知识梳理(2) Flux
查看>>
Android当内存监控到阈值时应该怎么办?
查看>>
阿里云宣布与国内规模最大的汽车企业上汽集团合作
查看>>
调试js碰到循环断点(debugger),应该怎么做?
查看>>
JB的测试之旅-网站的响应式与自适应
查看>>
图解 SQL 里的各种 JOIN
查看>>
2018 总结
查看>>
网页图标的优雅使用与总结
查看>>
iOS 录制视频时,添加水印
查看>>
工厂模式 抽象模式
查看>>
搞懂“分布式锁”,看这篇文章就对了
查看>>
1 序言 [全栈攻城师的技术札记]
查看>>
LeetCode之DI String Match(Kotlin)
查看>>
LeetCode之Two Sum IV Input is a BST(Kotlin)
查看>>
iOS 瀑布流之栅格布局
查看>>
Android中Activity的启动流程
查看>>
Parity钱包漏洞全分析及区块链安全风险应对措施
查看>>
到底是用"静态类"还是单例
查看>>
Redis RedLock 完美的分布式锁么?
查看>>
深入剖析Redis系列(八) - Redis数据结构之集合
查看>>