在golang中提供的encoding/json包可以编码JSON以及解码JSON数据。

1、编码JSON

  使用json包中的Marshal函数进行编码,源码如下:

func Marshal(v interface{}) ([]byte, error) {
e := &encodeState{}
err := e.marshal(v, encOpts{escapeHTML: true})
if err != nil {
return nil, err
}
return e.Bytes(), nil
}

  (1)将一个结构体转码JSON

package main

import(
"encoding/json"
"fmt"
) type User struct{
Name string `json:"name"`
Age int `json:"age,omitempty"`
Address string `json:"-"`
} func main(){
user := []User{
User{"张三", , "山东青岛"},
User{"李四", , "山东潍坊"},
} if data, err := json.Marshal(user); err == nil{
fmt.Println(string(data))
}
}

  输出结果:

[{"name":"张三","age":23},{"name":"李四","age":22}]

  说明:json包在解析结构体时,如果遇到key为json的字段标签,则会按照一定规则解析该标签:第一个出现的是字段在JSON串中使用的名字,之后为其他选项,例如omitempty指定空值字段不出现在JSON中。如果整个value为"-",则不解析该字段。

  (2)将一个map类型转换为JSON字符串

package main

import(
"encoding/json"
"fmt"
) func main(){
student := make(map[string] interface{}) student["no"] = ""
student["name"] = "张三"
student["course"] = []string{
"语文","数学","英语",
} if data,err := json.Marshal(student); err == nil{
fmt.Println(string(data))
} }

  输出结果:

{"course":["语文","数学","英语"],"name":"张三","no":""}

2、解码JSON

(1)JSON转换map

package main

import(
"encoding/json"
"fmt"
) func main(){ data := `{"course":["语文","数学","英语"],"name":"张三","no":""}` var student = make(map[string] interface{}) err := json.Unmarshal([]byte(data), &student) if err == nil {
fmt.Println(student["no"])
fmt.Println(student["name"])
fmt.Println(student["course"])
}
}

  注意此处student["course"],不是切片,也不是数组,如果遍历的话会提示:type interface {} does not support indexing。

(2)JSON转结构体

package main

import(
"encoding/json"
"fmt"
) type Student struct{
Name string `json:"name"`
No string `json:"no"`
Course []string `json:"course"`
} func main(){ data := `{"course":["语文","数学","英语"],"name":"张三","no":""}` var student Student err := json.Unmarshal([]byte(data), &student) if err == nil {
fmt.Println(student.No)
fmt.Println(student.Name) for index,value := range student.Course {
fmt.Printf("%d-->%s\n", index, value)
}
}
}

001-Go JSON处理的更多相关文章

  1. 爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,loads,dump,load方法介绍

    爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,load ...

  2. 14_CXF发布REST服务

    [rest服务] REST服务是一种软件架构模式,只是一种风格.REST服务采用HTTP做传输协议. REST对于HTTP的利用分为以下两种: 一.资源定位 REST要求对方资源定位更加准确,如下: ...

  3. 使用CXF开发JAX-RS类型的WebService

    1.JAXRSServerFactoryBean编程方式 访问方式:http://localhost:8080/cxf_spring_rest_server/ws/rest/student/query ...

  4. Kafka部署安装

    一.环境准备 1.jdk 8+ 2.zookeeper 3.kafka 说明:在kafka较新版本中已经集成了zookeeper,所以不用单独安装zookeeper,只需要在kafka文件目录中启动z ...

  5. 【JS】#001 JS定义对象写法(原型、JSON方式)

    下面主要写两种 JS 定义对象的 常用写法 写法1:[很像面向对象语言中的写法] function zhongxia(age) { this.age = age; } zhongxia.name = ...

  6. spring mvc返回json字符串的方式

    spring mvc返回json字符串的方式 方案一:使用@ResponseBody 注解返回响应体 直接将返回值序列化json            优点:不需要自己再处理 步骤一:在spring- ...

  7. JSON字符串和JS对象之间的转换

    JSON字符串和JS对象之间的转换 1 json字符串转换为js对象 1.1 标准json格式字符串转换为Js对象  JSON字符串 str JSON.parse(str) eval(str) eva ...

  8. .net 实体类与json转换(.net自带类库实现)

    注意要点. 1.jsonhelp编写时候添加的引用.System.Runtime.Serialization.Json; 2.实体类需声明为public jsonhelp代码: using Syste ...

  9. 使用Python解析JSON数据的基本方法

    这篇文章主要介绍了使用Python解析JSON数据的基本方法,是Python入门学习中的基础知识,需要的朋友可以参考下:     ----------------------------------- ...

  10. Delphi Json

    superobject.pas单元对json的解析非常方便, 力荐 下面演示对如下json的解析 { ", "memo": "S.H.E 004" } ...

随机推荐

  1. vs2010 :0X80041FEB 程序集无法修改版等内容

    AssemblyInfo.cs内容被清空或则格式有问题,无法修改,一个问题搞了8个小时  gisoracle 2018.09.22 包括加入现在项目,加入form多,都不正常,不能显示,一次稍加几个

  2. 将Excel中的数据批量导入数据库表

    private boolean import_to_database(String excel_path) throws BiffException, IOException, HsException ...

  3. Unity3d-Particle System系统的学习(二)

    这节我们继续上节没讲完的Particle参数. 上节我们讲了Emission发射器参数,我们接着往下讲Shape: 可以看到这个子模块的参数是跟形状有关: 1.Shape:发射形状.粒子被约束在这个形 ...

  4. Java反射-修改String常量

    /* * ReflectString.java * Version 1.0.0 * Created on 2017年12月15日 * Copyright ReYo.Cn */ package reyo ...

  5. java 8 stream特性

    在Java 8的新功能特性中,最棒的特性就是允许我们去表达我们想要完成什么而不是要怎样做.这正是循环的不足之处.要确保循环的灵活性是需要付出代价的.return.break 或者 continue都会 ...

  6. 双面女间谍第一至五季/全集Alias迅雷下载

    本季第一至五季 Alias Season (2001-2005)看点:<双面女间谍>她在CIA拥有双重身份,是个美貌矫健的年轻女间谍,一个性感的女007.但在第一季中,讲述更多的却是她在间 ...

  7. Calendar获取当天的初始时间,当月的初始时间,当年的初始时间

    如下:

  8. .NET零基础入门10:打老鼠之数据存储

    一:数据库设计 到此为止,打老鼠游戏还不能保存每次游戏的成绩,我们今天完成的任务就是要存储成绩到SQLSERVER的数据库中. 在上节课中,我们已经知道了如何创建数据库,所有,先创建数据库" ...

  9. RV32FD指令集

    Risc-V架构定义了可选的单精度浮点指令(F扩展指令集)和双精度浮点指令(D扩展指令集). Risc-V架构规定:处理器可以选择只实现F扩展指令子集而不支持D扩展指令子集:但是如果支持了D扩展指令子 ...

  10. go语言之进阶篇方法值

    1.方法值 示例: package main import "fmt" type Person struct { name string //名字 sex byte //性别, 字 ...