大白话攻略之JSON篇

先看百度百科的定义:

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

  1. 将变量打包成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这个字符串传递到后端服务器即可。

  1. 将JSON字符串还原为变量

    也就是上例的逆操作,可以这样:

            let json = '{"a":1,"b":2,"c":3}' //假设这串字符串是服务器发过来的
            let data = JSON.parse(json)
            console.log(data.a) //输出:1
    
  2. 总结:

    JS对象 转 JSON字符串:用 JSON.stringify (JS对象)

    JSON字符串 转 JS对象:用 JSON.parse (json字符串)


2. Golang使用JSON

  1. 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
    

  2. 变量转成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"}
    
  3. 总结

    JSON字符串转变量 : 用 json.Unmarshal([]byte(JSON字符串), &变量名)

    变量转成JSON字符串:用JSON字符串, _ := json.Marshal(变量名)


JSON入门内容就讲到这,当然,在真实的环境中,JSON在使用细节上不会这么简单,但请记住它的本质,无非是利用字符串方式解决各种平台之间的数据交换的问题,不用将它想得过于复杂。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,137评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,824评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,465评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,131评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,140评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,895评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,535评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,435评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,952评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,081评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,210评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,896评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,552评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,089评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,198评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,531评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,209评论 2 357

推荐阅读更多精彩内容