在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. iPhone开发过程中调试多次Release问题 message sent to deallocated

    初级:第一步   为程序添加符号断点 malloc_error_break  方法如下. 目标效果:让程序崩溃时跳转到出错到那一行.但是往往达不到这个效果.不行就继续往下看. At times, wh ...

  2. springboot实现服务器端消息推送(websocket + sockjs + stomp)

    服务器端推送技术在web开发中比较常用,可能早期很多人的解决方案是采用ajax向服务器轮询消息,这种方式的轮询频率不好控制,所以大大增加了服务器的压力,后来有了下面的方案:当客户端向服务器发送请求时, ...

  3. ZooKeeper_客户端工具zkCli.sh使用

    #一.命令 [root@VM_31_182_centos bin]# ./zkCli.sh -server 127.0.0.1:2181   #二.帮助命令 help #三.创建.修改.删除.退出de ...

  4. 解决eclipse中web项目出现Project facet Java version 1.8 is not supported.的问题

    项目的jdk和tomcat的jdk版本不同,将eclipse-preference-server-runtime environments点击你要用的tomcat点击edit-jre选择和你项目对应的 ...

  5. intellij idea 如何一键清除所有断点

    原文地址: https://blog.csdn.net/yanziit/article/details/73459795 我之前写了一个百度经验,但是搜不到,现在复制一遍,自己留个记录. 注:此方法适 ...

  6. ASP.NET Razor 简介

    ylbtech-.NET: ASP.NET Razor 简介 Razor 不是一种编程语言.它是服务器端的标记语言. 1. 什么是 Razor?返回顶部 Razor 是一种标记语法,可以让您将基于服务 ...

  7. IO流 简介 总结 API 案例 MD

    目录 IO 流 简介 关闭流的正确方式 关闭流的封装方法 InputStream 转 String 的方式 转换流 InputStreamReader OutputStreamWriter 测试代码 ...

  8. 用JQuery 判断某个属性是否存在hasAttr的解决方法

    在jquery编码中,我们会判断元素是否存在某个属性.比如是否包含 class="new" 的样式呢.JQuery判断就非常简单了,因为有 hasClass这个方法 $(" ...

  9. java.sql.SQLException: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值

    问题来源:我在执行sql生成json并存入数据库是报的错. 原因:存json的字段我定义其类型为varchar2. 分析:这个异常是指,用户向数据库执行插入数据操作时,某条数据的某个字段值过长,如果是 ...

  10. windows 使用 xxfpm 解决 php-cgi 进程自动关闭

    windows 下 php-cgi 进程处理一定数量的访问后,就会自动关闭,由于没办法直接让 php-cgi 进程支持更多的访问数量,所以只能启动多个进程来满足需求. xxfpm 是一个可执行程序,它 ...