解析Kotlin JSON格式
作者:须须草 发布时间:2021-07-16 08:09:35
Kotlin JSON解析
开发环境就是下面这个…
一、添加依赖
在build.gradle.kts
文件中添加下面依赖。
dependencies {
implementation("com.google.code.gson:gson:2.4")
}
二、解析JSON格式字符串
主要解析的格式如下,上面data类与下面这个格式是配套对着的。{"type":"allData","Dev-Area":"0757","Dev-User":"100001","Dev-Addr":"005","content":{"YxG":"0000000100000000","Ia":0.0,"Ib":0.0,"Ic":0.0,"Io":0.000},"time":1679830981975}
这条JSON格式报文中"content"
内还有其他的成员,如"YxG"
、"Ia"等
,所以json_packet_data
内有json_packet_content
这个变量。
import com.google.gson.annotations.SerializedName
data class json_packet_content(
@SerializedName("YxG")
var yx:String?=null
)
data class json_packet_data(
//序列名称为
@SerializedName("Dev-Area")
var Area:String? = null,
//设备名称为
@SerializedName("Dev-User")
var User:String? = null,
//设备名称为
@SerializedName("Dev-Addr")
var Addr:String? = null,
var type :String? = null,
@SerializedName("content")
var json_content: json_packet_content? = null
)
@SerializedName
可以指定解析成员变量名称,所以我这里将json_content
这个变量定向为获取content
里面的变量。其中type
与json
成员变量同名,所以不需要重新定向,不过加上去@SerializedName("type")
也不是不可以。
下面是主要程序部分
import com.google.gson.Gson
import com.google.gson.annotations.SerializedName
fun main(args: Array<String>) {
val jsonTestString= """{"type":"allData","Dev-Area":"0757","Dev-User":"100001","Dev-Addr":"005","content":{"YxG":"0000000100000000","Ia":0.0,"Ib":0.0,"Ic":0.0,"Io":0.000},"time":1679830981975}"""
try {
val parseGson = Gson().fromJson(jsonTestString, json_packet_data::class.java)
println(parseGson)
}catch (e:com.google.gson.JsonParseException){
println("解析异常")
}
}
运行效果如下
然后把data类里面的数据转换一下,即可完成获取相应的数据。
还有另外一种情况,解析数组!!{"type": [{"wait": "ss"}, {"ss": "22"}]}
情况就比如下面这个代码一样处理,使用List泛型!!
import com.google.gson.Gson
import com.google.gson.annotations.SerializedName
data class inter_json(
var wait:String?=null,
var ss:String?=null
)
data class json_mode(
var type:List<inter_json>?=null
)
fun main(args: Array<String>) {
val mystring = """{"type": [{"wait": "ss"}, {"ss": "22"}]}"""
try {
val parseGson = Gson().fromJson(mystring, json_mode::class.java)
println(parseGson)
}catch (e:com.google.gson.JsonParseException){
println("解析异常")
}
}
可以看出来,操作方便简单,非常的爽!!!
二、生成JSON格式字符串
主要是解析麻烦,生成还是比较多方法的…比如直接字符串相加…略…
来源:https://blog.csdn.net/qq_36883460/article/details/129784393


猜你喜欢
- SqlMapConfig.xml的约束,也就是Mybatis主配置文件的约束<?xml version="1.0"
- 我就废话不多说了,大家还是直接看代码吧~ public Sprite LoadSourceSprite(string relat
- 简介:gateway主要是做路由 负载,过滤 主要是替代zuul 1.x 性能比zuul好 zuul是基于Servlet ,gateway是
- Android ActionBarActivity设置全屏无标题实现方法总结前言:新建的Activity继承自ActionBar
- Oracle 数据库,查询增加RowBounds限制查询条数,默认是0到1000条private final static int rowL
- Java%(取模运算)Java的取模运算1.实现算法public static double ramainder(double divide
- 最近有一个实现一个带有圆角的ImageView的需求,在网上找了找三方,虽然Demo都是正确的,但是移植过来就不可以了,因为请求链接的时候用
- 目录1、synchronized锁的底层实现原理2、基于synchronized实现单例模式3、利用类加载实现单例模式(饿汉模式)1、syn
- 在c++当中,标准类型string来代表可变长的字符串序列,使用string需要加载string 头文件,而方法定义在命名空间std当中,所
- 本文实例为大家分享了java简单实现斗地主发牌的具体代码,供大家参考,具体内容如下问题:参考斗地主的游戏规则,完成一个发牌的功能(54张牌,
- 背景1> 大家都知道SpringBoot是通过main函数启动的,这里面跟踪代码到处都没有找到while(true),为什么启动后可以
- 本文实例讲述了Java实现对两个List快速去重并排序操作。分享给大家供大家参考,具体如下:1:去重并排序package twolist;i
- 一、日志1、配置日志级别日志记录器(Logger)的行为是分等级的。如下表所示:分为:OFF、FATAL、ERROR、WARN、INFO、D
- 上一篇:C# 异步多线程入门到精通之Thread篇下一篇:异步多线程之入Task,待更新启动线程池线程ThreadPool 提供的 API
- 开发中最让人头疼的是应用突然 * ,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误
- 本文实例讲述了C#将指定目录所有文件名转换成小写的方法。分享给大家供大家参考。具体如下:using System;using System.
- 在日常开发中我们经常会使用到行情数据,很多的时候我们根据一个基准数据区构造行情,但是随着时间的推移然来构造的数据与真实行情数据之间的差距越来
- 完成支付宝支付、查询的接口之后,我们应该还需要定时与支付宝进行对账,以确保商户系统的订单信息是正确的,想知道支付宝支付、查询接口实现过程的亲
- 今天给大家分享纯注解版spring与mybatis的整合mybatis包下:有这几个,上面图片没有展开配置Bean:MyBatisAutoC
- 前言说起整合自然离不开ssm,我本身并不太喜欢ORM,尤其是MyBatis,把SQL语句写在xml里,尤其是大SQL,可读性不高,出错也不容