Go之json数据

json是一种轻量级的数据交换格式,有限提高数据在网络中的传输效率,易于阅读和编写数据,且易于生成key-value格式数据。

一:json数据的序列化举例

package main

import (
	"fmt"
	"encoding/json"
)

//结构体变量序列化
type Personal struct{
	Name string
	Age int
	Hobby string
}

func StructJson() {
	personal := Personal{
		Name : "louis",
		Age : 18,
		Hobby : "it",
	}
	//json.Marshal返回[]byte与err
	personal_json, _:= json.Marshal(personal)
	//由于personal_json是[]byte数据类型,故要通过string()函数转换
	fmt.Printf("personal_json=%v\n", string(personal_json))
}

//map数据序列化
func MapJson(){
	m := map[string]interface{}{
		"Address":"深圳",
		"Phone":"12345678911",
		"Salary":10000,
	}
	map_json, _ := json.Marshal(m)
	fmt.Printf("map_json=%v\n", string(map_json))
}

//切片序列化
func SliceJson(){
	s := []int{1,2,3,4,5,6,7,8}
	slice_json, _ := json.Marshal(s)
	fmt.Printf("slice_json=%v\n", string(slice_json))
}

//基本数据类型序列化
func Base() {
	str := "string"
	base_json, _ := json.Marshal(str)
	fmt.Printf("base_json=%v\n", string(base_json))
}
func main() {
	StructJson()
	MapJson()
	SliceJson()
	Base()
}
结果
[ `go run json.go` | done ]
	personal_json={"Name":"louis","Age":18,"Hobby":"it"}
	map_json={"Address":"深圳","Phone":"12345678911","Salary":10000}
	slice_json=[1,2,3,4,5,6,7,8]
	base_json="string"

二:json反序列化

package main

import (
	"fmt"
	"encoding/json"
)

//结构体变量序列化
type Personal struct{
	Name string
	Age int
	Hobby string
}

func StructJson() {
	personal := Personal{
		Name : "louis",
		Age : 18,
		Hobby : "it",
	}
	//json.Marshal返回[]byte与err
	personal_json, _:= json.Marshal(personal)
	//由于personal_json是[]byte数据类型,故要通过string()函数转换
	fmt.Printf("personal_json=%v\n", string(personal_json))
	var personal_data Personal
	//接受的变量必须为指针类型
	err := json.Unmarshal([]byte(personal_json), &personal_data)
	if err != nil {
		fmt.Printf("反序列化错误:%v\n", err)
	}
	fmt.Printf("personal_json反序列化=%v\n", personal_data)
}

func main() {
	StructJson()
}
结果
[ `go run json.go` | done ]
	personal_json={"Name":"louis","Age":18,"Hobby":"it"}
	personal_json反序列化={louis 18 it}

三:结构体的序列化的反射机制

当结构体定义的字段为大写字母开头,但客户端希望接受到的都是小写字母的字段时,可以使用反射机制

package main

import (
	"fmt"
	"encoding/json"
)

//结构体变量序列化
type Personal struct{
	Name string `json:"name"`
	Age int `json:"age"`
	Hobby string `json:"hobby_data"`
}

func StructJson() {
	personal := Personal{
		Name : "louis",
		Age : 18,
		Hobby : "it",
	}
	personal_json, _:= json.Marshal(personal)
	fmt.Printf("personal_json=%v\n", string(personal_json))
}

func main() {
	StructJson()
}
结果
[ `go run json.go` | done ]
	personal_json={"name":"louis","age":18,"hobby_data":"it"}

原文地址:https://www.cnblogs.com/louis181214/p/10317581.html

时间: 2024-08-29 20:48:39

Go之json数据的相关文章

C#如何拿到从http上返回JSON数据?

在实际开发中,我们经常会使用到API,所谓API一般就是一个地址,我们称之为接口.然后我们通过用C#对这地址发送请求,请求后,服务器就会给我们返回数据,一般是XML或者JSON,这里我们主要讲述的是JSON. 为了演示,我们这里准备了一个接口,这是一个查询物流的接口.(读者读到这篇文章的时候,接口可能有效,也可能失效,因为接口是网上找的,不是笔者自己写的,但是原理是一样的.) 接口:  http://www.kuaidi100.com/query?type=快递公司编码&postid=物流单号

【Struts2】SSH如何返回JSON数据

  在开发中我们经常遇到客户端和后台数据的交互,使用比较多的就是json格式了.在这里以简单的Demo总结两种ssh返回Json格式的数据 项目目录如下 主要是看 上图选择的部分 WebRoot里面就是平常的配置 第一种方法是使用com.google.gson.Gson 将对象转化为Json字符串  (gson-1.6.jar) 主要的代码如下 1 package com.javen.tool; 2 3 import java.io.IOException; 4 import java.io.P

jmeter之json数据参数化 断言等

在 http Load Testing 中,json 数据的提交是个让人头疼的问题.本文详细介绍如何进行 JMeter 的 json 测试提交,以及如何将其参数化.Step 1 http json 请求采样器的录制 这个工具很多,可以使用 JMeter 代理录制,也可以使用 Badboy. Step 2 为该采样器添加 HTTP 信息管理器鼠标右击该采样器,右键菜单选择 "添加" -> 配置元件 -> HTTP 信息头管理器,然后信息头添加一条名称为 Content-Typ

XML 数据请求与JSON 数据请求

(1)XML 数据请求 使用 AFNetworking 中的 AFHTTPRequestOperation 和 AFXMLParserResponseSerializer,另外结合第三方框架 XMLDictionary 进行数据转换 使用 XMLDictionary 的好处:有效避免自行实现 NSXMLParserDelegate 委托代理协议方法来进行繁琐的数据拼凑解析 (2)JSON 数据请求 使用 AFNetworking 中的 AFHTTPRequestOperation 或 AFHTT

json数据解析,并实现将网络json数据获取用listview显示

需要使用jar包 fastjson或gson这两个jar包. //Gson的使用方式 Gson gson=new Gson(); String str=ReadAssetsFile.readtext(this,"json_ss");//this当前类,"json_ss"需要解析的文件名 UserMessage userMessage=gson.fromJson(str,UserMessage.class);//需要解析的json文件最外层类名 //fastjson的

json数据源文件解析

文章: http://blog.csdn.net/lili72 背景: 分布式文件通过rsync同步到生产机. 文件数 1440=24*60  也就是一分钟生成一个文件 文件命名 0000 0001 0002 ... 2358 2359 .由于文件传过来是JSON格式,需要对文件进行解析,导入HDFS中. 过程 1  rsync同步文件到当天的日期目录,每天实时把文件同步到生产机制定目录,每天生成新文件夹,由于是每分钟生成文件,每个文件夹都有1440个文件. 1.1  修改配置文件,增加一个目录

CoAP学习笔记——nodeJS node-coap返回JSON数据包

0 前言 本文说明如何使用node-coap返回JSON数据包.CoAP是专门为物联网系统开发的面向网络的应用层协议栈,CoAP建立在UDP协议之上尽可能减少网络开销,又具有HTTP Restful类型的特性.node-coap使用nodejs实现了coap的客户端和服务器端. [测试环境]--ubuntu/Linux [相关博文] [CoAP协议文档--The Constrained Application Protocol (CoAP)] [CoAP协议学习--CoAP基础] [CoAP学习

继上一个坑有一个坑(微信小程序一键登录之无法识别json数据)

前言:  作为一个运维人员不背锅,谁背呢! 正文: 开发人员和前端人员写好了微信小程序,然后坑出现了,安卓上打死不能一键登录.然后开始排查, 开始从数据上着手,不管是使用postman进行模拟测试数据,还是通过抓包查看数据,无任何问题,但是就是微信小程序无法判断改数据是json数据. 后来继续测试,打console.log 断点,抛数据出来查看发现 该数据 确实也存在问题,直接使用res.data 使用typeof 查看 确实为字符串,但是使用JSON.parse 却抛的微信小程序 百度都不能百

Json数据的序列化与反序列化的三种常用方法介绍

以下内容是本作者从官网中看相应的教程后所做的demo,其体现了作者对相关知识点的个人理解..作者才疏学浅,难免会有理解不到位的地方..还请各位读者批判性对待... 本文主要介绍在Json数据的序列化与反序列化的过程中我经常用到的三种工具的基本使用方法,及其他们之间 的比较...希望能够对读者们有一些帮助... 这里介绍到的三种解析与生成Json数据的方法分别是:标准JSON解析与生成方法.使用gson解析与生成JSON数据 .使用fastJsson解析与生成JSON数据. 首先,这些工具都可以到

Struts2.5 利用Ajax将json数据传值到JSP

AJAX +JSON=>JSP AJAX AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面. JSON JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范