最近在做实验时,遇到了数据传输格式问题,节点之间的通信使用Socket,数据使用JSON格式进行传输,但是当数据有多种不同类型时,解析时会很麻烦,无意间看到了官方文档的示例(如果消息类型比较少,可以采用这种方法),因此记录一下解决方法。

目前做的实验为共识算法的实验,在实验中,主要有以下两种不同类型的消息,PrepareCommit,节点发送消息,其它节点接收到消息之后解析,为了避免冗余的代码,可以定义一个结构体IncomingMessage来解析不同类型的消息,由于还需要根据不同的消息类型执行不同的命令,可以通过判定IncomingMessage中的Field是否为nil来执行响应的命令。

在发送端,如果要发送Prepare消息,那么只需在IncomingMessagePre字段中填入相关信息,把Com设为nil即可,如果要发送Commit消息,那么只需在IncomingMessageCom中填入相关信息,把Pre设为nil即可。

代码示例

package mainimport ("encoding/json""fmt""log"
)type Prepare struct {Phase string `json:"Phase"`Tx    []int  `json:"Tx"`
}type Commit struct {Phase string `json:"Phase"`Tx    string `json:"Tx"`
}type IncomingMessage struct {Pre *PrepareCom *Commit
}func main() {tx := []int{1, 2, 3, 4, 5, 6}p := IncomingMessage{&Prepare{Phase: "Prepare",Tx:    tx,},nil,}b, err := json.Marshal(p)if err != nil {log.Fatal(err)}fmt.Println(string(b))var in IncomingMessageerr = json.Unmarshal(b, &in)if err != nil {log.Fatal(err)}fmt.Println(in)if in.Pre != nil {fmt.Println(in.Pre.Phase)fmt.Println(in.Pre.Tx)}if in.Com != nil {fmt.Println(in.Com)} else {fmt.Println("Com is nil.")}
}

go json解析结构体相关推荐

  1. Qt_C++JSON转结构体

    文章目录[隐藏] Qt_C++++JSON 转结构体前言 Qt_C++++JSON 转结构体需求说明 Qt_C++++JSON 转结构体代码说明 Qt_C++++JSON 转结构体最终实现效果 Qt_ ...

  2. C语言实现Json与结构体相互转换——cson

    https://github.com/sunchb/cson.git 目录 前言 示例 实现 1.实现"反射" 1.1.描述结构体属性 1.2.访问结构体属性 1.3.结构体属性赋 ...

  3. json 潜逃 结构体_JSON还原为结构体 - osc_t5zhwnvx的个人空间 - OSCHINA - 中文开源技术交流社区...

    JSON还原为结构体 1)JSON字符串还原为结构体: 2)访问结构体的字段值: 本例运行效果图: uses SynCommons; const // JSON字符串 JSON1 = '{' + #1 ...

  4. json 潜逃 结构体_JSON还原为结构体

    JSON还原为结构体 1)JSON字符串还原为结构体: 2)访问结构体的字段值: 本例运行效果图: uses SynCommons; const // JSON字符串 JSON1 = '{' + #1 ...

  5. 【C语言】深度探索offsetof,解析结构体的成员数组和指针

    目录 一.offsetof的功能 二.自定义offsetof 三.探索结构体 3.1结构体中的成员 3.2结构体指针和数组 该篇博客主要讲了自定义offsetof是如何实现的,为什么要这样写,以此沿生 ...

  6. golang json转结构体中嵌套多个数组_ElasticSearch第六篇:复合数据类型-数组,对象...

    在ElasticSearch中,使用JSON结构来存储数据,一个Key/Value对是JSON的一个字段,而Value可以是基础数据类型,也可以是数组,文档(也叫对象),或文档数组,因此,每个JSON ...

  7. go语言json字符串解析为结构体数组,结构体指针的数组

    废话不多说直接上效果图 完整代码如下 package main import ("encoding/json""fmt" ) // 结构体定义 type rob ...

  8. python解析C/C++结构体二进制数据

    一.引言 socket为数据通信中必不可少的一部分,常用的有TCP数据传输协议和UDP数据传输协议.(具体的socket详情这里不赘述). 不论是TCP还是UDP,凡是涉及到数据传输,都需要进行数据内 ...

  9. go var type 互转_Go语言学习笔记(第九章) 结构体

    Go语言基础之结构体 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go 通过类型别名(alias types)和结构体的形式支持用户自定义 ...

最新文章

  1. Eclipse运行时无法加载主类的解决方法
  2. 坐姿绳索划船 - 坐姿器械划船动作图解教程
  3. servlet基础知识
  4. jzoj3910-Idiot的间谍网络【倍增,dfs】
  5. matlab 排序点,matlab如何进行排序?
  6. Linux下coredump调试3:补录
  7. asp.net mvc项目中遇到的古怪的问题,(项目中有frame框架)
  8. Chrome的插件扩展程序安装目录是什么?在哪个文件夹?
  9. 可视化管理_供应链可视化管理作用与现状分析
  10. 计算机乐谱吃鸡,Capo可自动识别音乐生成乐谱
  11. 三维扫描用于3D打印技术
  12. Nvidia jetson tx2 ubuntu16.04插入128GB内存卡报错:Unable to access/mount “128 GB Volume”
  13. Qt 快速利用qt designer Layout绘制GUI界面
  14. 5-5中央处理器-指令流水线
  15. OpenCV(Python)颜色识别(一)
  16. android movie 资源释放,Android 资讯类App项目实战 第四章 电影模块
  17. ipad可以使用其他品牌的手写笔吗?apple pencil一代平替笔
  18. 机器学习(三) 线性回归
  19. 【python】python每天抓取一篇英语美文,发送到邮箱
  20. β-甲酰基-5,10,15,20-四苯基卟啉镍[NiTPP(CHO)];meso 四(2,5 二氟苯基)卟啉(T(2,5 DFP)P);meso-四(4-甲基-3-磺酸苯基)卟啉[T(4-MP)PS4

热门文章

  1. 华为watch3和苹果watch7哪个好 华为watch3和苹果watch7对比
  2. android 实现aac音频合并拼接
  3. linux / dbus
  4. 要把网络安全像消防安全一样重视起来
  5. html页面之间跳转失败,js跳转到上一页面失败的解决方法
  6. AutoAugment
  7. 1688 API分享:1688商品采集接口 1688关键字搜索接口
  8. 常见芯片算力对比(一)
  9. 当前小程序 跳转 另一个小程序支付(跳转到当前小程序的某个页面)
  10. js字符串与正则匹配