当前位置: 首页 > news >正文

漳州市建设局网站百度seo排名优化软件

漳州市建设局网站,百度seo排名优化软件,咸阳做网站开发公司哪家好,网站建设 开发票目录 何为JSON 编码JSON 实践时刻 解码JSON 实践时刻 延伸拓展 何为JSON JSON (JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。JSON最初是JavaScript的一部分,后由于便于快速编写的特性,被开发者独立出来。基本上所有的语…

目录

何为JSON 

编码JSON

实践时刻

解码JSON

实践时刻

延伸拓展


何为JSON 

       JSON (JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。JSON最初是JavaScript的一部分,后由于便于快速编写的特性,被开发者独立出来。基本上所有的语言都支持JSON数据的编码和解码。对于网络编程而言,JSON的重要性不言而喻。

        JSON中的键以字符串存储,值可以取任意类型。

        它有以下三种结构:

  1. 字符串或数组类型:{"name":"Mark","age":18}
  2. JSON数组:[{"name":" Tom","age":18},{"name":"Jerry","age":17}]
  3. 嵌套类型:{"name":" Tom", "birthday":{"month":12,"day":25}}

        大括号“{}”用来描述一组“不同类型的无序键值对集合”,方括号“[]”用来描述一组“相同类型的有序数据集合”。


编码JSON

        GO的标准库提供了 encoding/json 来处理JSON。涉及到的接口有以下几种:

func Marshal(v interface{}) ([]byte, error)

        Marshal函数要求提供一个接口类型的参数,通常interface{}类型会用结构体和map等数据结构来传入。

        还有一种JSON编码接口,提供格式化输出的操作:

func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error)

        MarshalIndent是Marshal的升级版,可以按照所设计的特定格式进行格式化输出。其中prefix参数用于对每字段进行标记分隔。

实践时刻

        代码示例:

/*
------------------------------------------------------------------------------- @FILE    map2json.go- @AUTHOR  MAX TSANG- @EMAIL   ZIHANTSANG@HOTMAIL.COM- @DATE    2023/07/23 16:46:43- @BRIEF   MAP2JSON------------------------------------------------------------------------------
*/package mainimport ("encoding/json""fmt"
)func main() {data_map := make(map[string]interface{}, 5)data_map["name"] = "Mark"data_map["sex"] = "male"data_map["age"] = 24data_map["birth"] = "1998-01-01"data_map["Education"] = []string{"Bachelor,Master"}res, _ := json.Marshal(data_map) //_对error信息省略res_format, _ := json.MarshalIndent(data_map, "", "      ")fmt.Println("result = ", string(res))fmt.Println("result with format = ", string(res_format))
}

        输出结果:

        除此之外,我们还可以用结构体struct来与JSON进行互转

        * 一般情况下,推荐都使用结构体struct来进行编解码操作

        代码示例:

/*
------------------------------------------------------------------------------- @FILE    struct2json.go- @AUTHOR  MAX TSANG- @EMAIL   ZIHANTSANG@HOTMAIL.COM- @DATE    2023/07/23 16:51:22- @BRIEF	 STRUCT2JSON------------------------------------------------------------------------------
*/package mainimport ("encoding/json""fmt"
)type Resume struct {Name      string   `json:"name "`Sex       string   `json:"sex "`Age       int      `json:"age "`Education []string `json:"education "`Inservice bool     `json:"inservice "`
}func main() {resume := Resume{"Mark", "female", 24,[]string{"bachelor,master"}, false}res, err := json.MarshalIndent(resume, "", "     ")if err != nil {fmt.Println(err)}fmt.Println("result = ", string(res))
}

        输出结果:

 在编辑struct字段时,可以在字段后添加标签来控制编解码的过程。控制字段有以下三种:

  1. - : 不解析该字段
  2. omitempty : 当字段为空或长度为0(map array string等结构)时不解析
  3. FieldName: 解析JSON时,使用该名称 (在代码示例中的name sex age ... 这些都属于FieldName)

解码JSON

        在对JSON解码时,标准库提供了Unmarshal接口。

func Unmarshal(data []byte, v interface{}) error

        Unmarshal函数解析JSON时,需要传入一个接口类型的参数,而写入接口有以下类型:

数据类型对照关系
Bool对应JSON布尔类型
float64对应JSON数字类型
string对应JSON字符串类型
[]interface{}对应JSON数组
map[string]interface{}对应JSON对象
nil对应JSON的null

        当JSON值与给出的目标类型不匹配或JSON输出的值超出写入目标类型的范围内,Unmarshal会自动跳过该字段并完成其余的解码操作 。

实践时刻

        代码示例:

/*
------------------------------------------------------------------------------- @FILE    json2map.go- @AUTHOR  MAX TSANG- @EMAIL   ZIHANTSANG@HOTMAIL.COM- @DATE    2023/08/09 12:24:07- @BRIEF   JSON2MAP------------------------------------------------------------------------------
*/
package mainimport ("encoding/json""fmt"
)func main() {//一串模拟Json文本js := `
{"name":"Mark","sex":"male","age":24,"birth":"1998-01-01","Education":["Bachelor","Master"]
}`m := make(map[string]interface{}, 5)err := json.Unmarshal([]byte(js), &m) //将json解码并传至mif err != nil {fmt.Println(err)}fmt.Println("map = ", m)for k, v := range m {switch data := v.(type) /*类型值.(type)可以取到其数据类型*/ {case string:fmt.Printf("map[%s]的值类型为string,value = %s\n", k, data)case []string:fmt.Printf("map[%s]的值类型为[]string,value = %v\n", k, data)case float64:fmt.Printf("map[%s]的值类型为int,value = %f\n", k, data)case bool:fmt.Printf("map[%s]的值类型为bool,value = %t\n", k, data)case []interface{}:fmt.Printf("map[%s]的值类型为[]interface{},value = %v\n", k, data)}}
}

        输出结果:

         不难发现,解码json时若采用map结构,则需对值的数据类型进行判断,才可正确进行输出调用。struct结构体相较于map,可以很好解决这类问题,JSON库也会自动对结构体的类型进行解析,无需进行类型判断。

        代码示例:

/*
------------------------------------------------------------------------------- @FILE    json2struct.go- @AUTHOR  MAX TSANG- @EMAIL   ZIHANTSANG@HOTMAIL.COM- @DATE    2023/08/09 12:42:12- @BRIEF   JSON2STRUCT------------------------------------------------------------------------------
*/
package mainimport ("encoding/json""fmt"
)type Resume2 struct {Name      string   `json:"name"`Sex       string   `json:"sex"`Age       int      `json:"age"`Education []string `json:"education"`Inservice bool     `json:"inservice"`
}func main() {js := `
{"name":"Mark","sex":"male","age":24,"education":["Bachelor","Master"],"Inservice":false
}`var resume Resume2err := json.Unmarshal([]byte(js), &resume)if err != nil {fmt.Println(err)}fmt.Printf("resume = %+v", resume)}

        输出结果:


延伸拓展

        Go所提供的标准 "encoding/json" 可以满足我们基本的对于JSON的编码、解码操作,但性能上并不是最佳,有一个性能更好的开源项目- Fastjson 可以帮助我们解决这个问题。如果感兴趣,可以到GitHub上查找该项目

http://www.mmbaike.com/news/56566.html

相关文章:

  • 企业网站开发实训报告b站推广是什么意思
  • 怎么做自己的设计网站百度入口网页版
  • 百度站长工具怎么用网址域名
  • 网站建设开发背景自媒体发布平台
  • 公司网站模板源码网络营销推广实训报告
  • 关于花卉的网站怎么做网站权重优化
  • 河南网站制作价格seo项目完整流程
  • 口腔网站建设青岛网站建设哪家好
  • h5做网站教程百度网首页官网登录
  • 工信部网站备案举报2023网站seo
  • 开发公司制度河北百度seo软件
  • 2核4g做网站百度推广员工工资怎么样
  • 做网站管理系统企业网络营销成功案例
  • 网站设计排名北京广州谷歌seo公司
  • 做外贸是否需要有自己的网站关键词指数批量查询
  • 广州住房和城乡建设局网站济南做网站推广哪家好
  • 如何做国外网站彩票的推广常德seo
  • 内蒙古住房建设部官方网站微信推广引流方法
  • 网站后台管理是做一些什么河南seo和网络推广
  • 百度网站官网苏州百度快照优化排名
  • 网站收录了怎么做排名品牌整合营销推广
  • 宁波城乡住房建设厅网站网络营销推广合作
  • 建网站要什么关联词有哪些 全部
  • 网站建设业务员新闻摘抄
  • 残疾人无障碍网站怎么做南京企业网站排名优化
  • 好的app设计网站有哪些在哪个平台做推广比较好
  • dede网站地图文章变量深圳关键词优化软件
  • 个人做网站如何赚钱吗网站seo优化总结
  • 合肥网站设计公司网页设计制作网站模板图片
  • 厅网站建设项目背景网络公司有哪些