先看百度百科的定义:
JSON (JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
说实话,在第一次看到这段描述的时候,我根本不知道它想表达什么,啥是JSON啊,心里完全没谱。
本质上来说,JSON就是一个字符串,一个字符串,一个字符串!它将变量以字符串的形式进行传递。
先来讲讲在一般情况下,我们怎么传递变量,现在假设我们有三个变量: A=1,B=2,C=3 ,那我们在代码里如何传递这3个变量呢,(你可能会纳闷:这也算是个问题?)
比如:
let A=1
let B=2
let C=3
Function TEST(P1, P2, P3) {
Console.log (P1, P2, P2)
}
TEST(A, B, C) //打印:123
我们直接将A,B,C作为TEST函数的参数传进去完事儿,很简单对吧。
但是,如果代码不是用同一种语言写成的又怎么整?
比如浏览器端(俗称前端)用Javascript语言,服务器用PHP或者Java或者Golang写成,你怎么把Javascript的一个变量直接传递给例如用Golang写的某个函数呢?哈哈,开始挠头了吧。
这时候,JSON登场了,它的初始定义非常简单,就是把各种变量揉在一起变成一个长字符串,
比如A=1, B=2, C=3,JSON将它串在一起变成这样:
“{'a': 1,'b': 2,'c': 3}”
这样,利用传递单一字符串的方式,变相地将3个变量都传递走了,对机器而言,浏览器里运行的Javascript只是向后端的服务器传递了一个字符串,不管你后端运行的软件是什么语言写成,字符串总是可以接收的,因此迂回地解决了前后端变量交换问题。当然,JSON并非只能用在浏览器/服务器,任何没办法直接传递变量又需要进行数据交换的场合,都可以使用JSON。
1. Javascript 使用JSON
-
将变量打包成JSON字符串
在JS下使用JSON超级简单,还是用上面的例子:
let data = { a:1, b:2, c:3 } let json = JSON.stringify(data) console.log(json) //输出 {"a":1,"b":2,"c":3} 这个字符串
然后你通过http也好,ajax也好,把json这个字符串传递到后端服务器即可。
-
将JSON字符串还原为变量
也就是上例的逆操作,可以这样:
let json = '{"a":1,"b":2,"c":3}' //假设这串字符串是服务器发过来的 let data = JSON.parse(json) console.log(data.a) //输出:1
-
总结:
JS对象 转 JSON字符串:用 JSON.stringify (JS对象)
JSON字符串 转 JS对象:用 JSON.parse (json字符串)
2. Golang使用JSON
-
JSON字符串转变量:
方法1:预先创建结构体来保存从JSON字符串解析过来的数据
import "encoding/json" //首先引用json包 type Data struct { A string //注意,在定义结构体的时候,成员首字母一定要是大写,否则json包无法访问 B string C string } var data Data strJson := `{"a": "1","b": "2", "c":"3"}` json.Unmarshal([]byte(strJson), &data) //&符号是取址的意思 fmt.Printf(data.A) //输出:1
延展阅读:
Golang中根据首字母的大小写来确定可以访问的权限。无论是方法名、常量、变量名还是结构体的名称,如果首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包中使用,可以简单的理解成,首字母大写是公有的,首字母小写是私有的。
方法2:不创建结构体直接保存数据
import "encoding/json" var data map[string]interface{} strJson := `{"a": "1","b": "2", "c":"3"}` json.Unmarshal([]byte(strJson), &data) result := data["a"] fmt.Println(result) //输出:1
-
变量转成JSON字符串
data := map[string]interface{}{ "a": "1", "b": "2", "c": "3", } strJson, _ := json.Marshal(data) fmt.Println(string(strJson)) //输出:{"a":"1","b":"2","c":"3"}
-
总结
JSON字符串转变量 : 用 json.Unmarshal([]byte(JSON字符串), &变量名)
变量转成JSON字符串:用JSON字符串, _ := json.Marshal(变量名)
JSON入门内容就讲到这,当然,在真实的环境中,JSON在使用细节上不会这么简单,但请记住它的本质,无非是利用字符串方式解决各种平台之间的数据交换的问题,不用将它想得过于复杂。
网友评论