Json解析Json数据

本文介绍了JSON数据的结构,包括对象和数组,并展示了如何使用Gson库在Java中进行JSON解析。通过实例展示了如何创建JSON对象和数组,以及如何将JSON数据映射到数据类,特别提到了在处理嵌套结构和数组时的注意事项。同时,提供了错误码处理和数据提取的方法。
摘要由CSDN通过智能技术生成

Json数据个数

分为对象和数组,对象是指用大括号括起来的。数组是用中括号。
对象

//对象
{
	"User":"Zhou",
	"Psw":"123"
}
// 数组
[
	{"User":"Zhou",
		"Psw":"123"},
		
	{"User":"Zhou",
		"Psw":"123"}
]

数组里面包含对象,对象里面包含数组。对象里面的元素采用键值对形式。

{
        "user": "zhou",
        "pwd": "123456",
            
        "result": [
        	  {"user": "user1",
	 	      "pwd": "123456"},
	  	 	  {"user": "user2",
	 		  "pwd": "123456"}],
						
	   "Index": "0"			
}

在实际情况中,一般都是一个JSON对象里面有数组和其它字段,或者是很多的嵌套,只需要一层一层的去解析就可以了。有些Json字段名字不适合做变量名,因此需要使用序列化来映射。

data class DeviceResponseJson(
    @SerializedName("error_code")
    val error_code: Int,
    @SerializedName("result")
    val result: DevResult,
)

生成Json对象

        val jsonObj = JSONObject().put("user","zhou")
            .put("pwd","123456")

        val jsonArr = JSONArray()
        jsonArr.put(0,jsonObjNew)//数组的元素是Json对象
        jsonArr.put(1,jsonObjNew)
        jsonObj.put("result",jsonArr)//对象的value是数组

Gson解析Json对象

 val responseData = response.body?.string()//服务器返回的数据
 responseJson = Gson().fromJson(responseData, DeviceResponseJson::class.java)//json对应的数据类

假设某一Json的格式是:

{
    "error_code": 0,
    "result": {
        "totalNum": 2,
        "deviceList": [
            {
                "role": 0,
                "name":"hello"
                "status": 0
            },
            {
                "role": 0,
                "name":"me"
                "status": 0
            }
        ],
        "currentIndex": 1
    }
}

那么对用的数据类为

data class DeviceResponseJson(
    @SerializedName("error_code")
    val code: Int,
    @SerializedName("result")
    val result: DevResult,
)
data class DevResult(
 	@SerializedName("totalNum")
    val totalNum: Int,
    @SerializedName("deviceList")
    val deviceList: List<TapoDevice>,
    @SerializedName("currentIndex")
    val currentIndex: Int
)
//由于此处有数组,因此将deviceList的数据类型设置为List,泛型为自定义泛型
data class TapoDevice(
	val role: Int,
	val name: String
)

值得一提的是,我们不需要写下Json的所有字段,只需要写在类里面需要的字段即可。

 val responseData = response.body?.string()
 responseJson = Gson().fromJson(responseData, DeviceResponseJson::class.java)
 val error_code = responseJson.error_code
 if (error_code == 0) {
     val total_num = responseJson.result.totalNum
     val devListString : List<TapoDevice> = responseJson.result.deviceList
     for (dev in devListString) {
       Log.d("-z", "onResponse: ${dev.name}")
       dev.deviceId
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值