Android 中 解析 JSON 字符串的几种方式
在 Kotlin 中解析 JSON 字符串,可以使用多种方式,包括原生的 org.json 包,以及流行的第三方库如 Gson、Jackson 和 Moshi。
一、原生 org.json 包
org.json 是一个轻量级的 Java 库,用于处理 JSON 数据。它提供了简单易用的 API,可以方便地将数据结构(如对象、数组等)转换为 JSON 字符串。
1、特点
- 简单易用:org.json 提供了直观的 API,可以轻松地将数据结构转换为 JSON 字符串。
- 支持复杂结构:可以处理嵌套对象和数组,适用于大多数常见的 JSON 数据结构。
- 轻量级:org.json 是一个轻量级库,不会引入过多的依赖。
- 转义问题:org.json 会自动处理特殊字符的转义,无需手动处理。
- 性能:对于非常大的数据结构,org.json 的性能可能不如一些专门的 JSON 库(如 Gson 或 Jackson)。如果需要处理大规模数据,可以考虑使用更高效的库。
- 功能限制:org.json 的功能相对简单,如果需要更高级的特性(如自定义序列化、反序列化等),可以考虑使用 Gson 或 kotlinx.serialization。
2、数据结构及字符串
data class UserModel(val name: String, val age: Int, val isGirl: Boolean, val hobbies: List<String>, val address: Address)data class Address(val province: String, val detail: String)
val content = "{\"name\": \"Alice\", \"age\": 25, \"isGirl\": true, \"hobbies\": [\"reading\", \"coding\"], \"address\": {\"province\": \"fujian\", \"detail\": \"xx路xx小区\"}}"
3、demo 示例
package com.example.helloworld.jsonimport org.json.JSONArrayimport org.json.JSONExceptionimport org.json.JSONObjectobject OrgJsonUtil {/*** 获取测试 Json 字符串*/fun getJsonString(): String {val content = "{\"name\": \"Alice\", \"age\": 25, \"isGirl\": true, " +"\"hobbies\": [\"reading\", \"coding\"], " +"\"address\": {\"province\": \"fujian\", \"detail\": \"xx路xx小区\"}}"return content}/*** 解析 json 字符串为数据对象* @param jsonString json字符串* @return UserModel数据模型*/fun parseJson(jsonString: String): UserModel? {try {// 解析 Json 对象val jsonObject = JSONObject(jsonString)val name = jsonObject.getString("name")val age = jsonObject.getInt("age")val isGirl = jsonObject.getBoolean("isGirl")// 解析 Json 数组val hobbiesList = mutableListOf<String>()val hobbiesArray = jsonObject.getJSONArray("hobbies")for (i in 0 until hobbiesArray.length()) {val hobby = hobbiesArray.getString(i)hobbiesList.add(hobby)}// 解析子对象val addressObject = jsonObject.getJSONObject("address")val province = addressObject.getString("province")val detail = addressObject.getString("detail")