go json反序列化成指定类型

2024-09-08 06:04
文章标签 类型 go 指定 json 序列 化成

本文主要是介绍go json反序列化成指定类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介

简单的介绍一下使用go的json库,将json字符串反序列化成接口中指定的实现类

代码如下

package usejsontype ExamInterface interface {CheckRule(data any) bool
}type IntStru struct {DefalutVal int `json:"defalut_val"`Max        int `json:"max"`Min        int `json:"min"`
}func (i IntStru) CheckRule(data any) bool {if data.(int) < i.Max && data.(int) > i.Min {return true}return false
}func (i IntStru) New() {}type StringStru struct {DefaultVal string `json:"default_val"`Len        int    `json:"len"`
}func (s StringStru) CheckRule(data any) bool {if len(data.(string)) > s.Len {return false}return true
}
func (s StringStru) New() {}

测试用例

package usejsonimport ("encoding/json""fmt""testing"
)func TestRule(t *testing.T) {val := "{\"int\":{\"defalut_val\":0,\"max\":500,\"min\":30}}"var exam = map[string]interface{}{}err := json.Unmarshal([]byte(val), &exam)if err != nil {panic(err)}if val, ok := exam["int"]; ok {data, _ := json.Marshal(val)intr := &IntStru{}json.Unmarshal(data, intr)fmt.Println(intr.CheckRule(3))}val = "{\"string\":{\"default_val\":\"\",\"len\":3}}"err = json.Unmarshal([]byte(val), &exam)if err != nil {panic(err)}if val, ok := exam["string"]; ok {data, _ := json.Marshal(val)intr := &StringStru{}json.Unmarshal(data, intr)fmt.Println(intr.CheckRule("333"))}
}func TestMashal(t *testing.T) {s := StringStru{Len: 3}data, _ := json.Marshal(s)fmt.Println(string(data))i := IntStru{Max: 500, Min: 30}data, _ = json.Marshal(i)fmt.Println(string(data))
}

总结

其实主体逻辑在测试用例中,根据json字符串中特定字符串确定是将json串解析成何种子类,逻辑比较简单。

这篇关于go json反序列化成指定类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1147315

相关文章

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Go路由注册方法详解

《Go路由注册方法详解》Go语言中,http.NewServeMux()和http.HandleFunc()是两种不同的路由注册方式,前者创建独立的ServeMux实例,适合模块化和分层路由,灵活性高... 目录Go路由注册方法1. 路由注册的方式2. 路由器的独立性3. 灵活性4. 启动服务器的方式5.

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

关于最长递增子序列问题概述

《关于最长递增子序列问题概述》本文详细介绍了最长递增子序列问题的定义及两种优化解法:贪心+二分查找和动态规划+状态压缩,贪心+二分查找时间复杂度为O(nlogn),通过维护一个有序的“尾巴”数组来高效... 一、最长递增子序列问题概述1. 问题定义给定一个整数序列,例如 nums = [10, 9, 2

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

SpringBoot定制JSON响应数据的实现

《SpringBoot定制JSON响应数据的实现》本文主要介绍了SpringBoot定制JSON响应数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录前言一、如何使用@jsonView这个注解?二、应用场景三、实战案例注解方式编程方式总结 前言

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允