美文网首页
大白话攻略之JSON篇

大白话攻略之JSON篇

作者: Rockage | 来源:发表于2021-04-26 15:37 被阅读0次

    先看百度百科的定义:

    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在使用细节上不会这么简单,但请记住它的本质,无非是利用字符串方式解决各种平台之间的数据交换的问题,不用将它想得过于复杂。

    相关文章

      网友评论

          本文标题:大白话攻略之JSON篇

          本文链接:https://www.haomeiwen.com/subject/cxjerltx.html