android 如何在Kotlin中将JSON字符串解析为JSONObject?

hm2xizp9  于 2022-12-16  发布在  Android
关注(0)|答案(3)|浏览(1558)

我是编程新手,最近在Kotlin用Android Studio启动了一个项目。
所以,我遇到了一个JSON对象的问题。我从BroadcastReceiver对象获取数据,更具体地说,是一个字符串,格式如下:

{"s1":1}

这是一个简单的字符串,我用了一个函数调用来调用Json。

private fun toJson(data:String): JSONObject {

    var newData: String = data.replace("\"","")
    newData = newData.replace("{","")
    newData = newData.replace("}","")

    val newObject = newData.split(":")
    val name = newObject[0]
    val value = newObject[1]
    val rootObject = JSONObject()
    rootObject.put(name,value)

    return rootObject
}

我这样做是正确的方式吗?,我如何改进我的代码?
谢谢你的帮助,对不起我的英语!

3ks5zfa0

3ks5zfa01#

欢迎来到本站!
在2019年,没有人真正手动解析JSON,使用Gson库要容易得多,它把你的对象作为输入,然后吐出JSON字符串,反之亦然。
示例:

data class MyClass(@SerializedName("s1") val s1: Int)

val myClass: MyClass = Gson().fromJson(data, MyClass::class.java)
val outputJson: String = Gson().toJson(myClass)

这样你就不用直接使用JSON字符串了,而是使用Kotlin对象,这是类型安全的,也更方便。看看文档,它很大,也很容易理解
以下是一些教程:

val jsonObject = JSONObject(data)
8tntrjer

8tntrjer2#

最好的方法是使用kotlinx.serialization.将Kotlin对象转换为JSON表示形式,并使用@Serializable注解反向标记其类,然后在Json对象上使用提供的encodeToStringdecodeFromString<T>扩展函数:

import kotlinx.serialization.*
import kotlinx.serialization.json.*
​
@Serializable
data class User(val name: String, val yearOfBirth: Int)
​
   // Serialization (Kotlin object to JSON string)
​
   val data = User("Louis", 1901)
   val string = Json.encodeToString(data)
   println(string) // {"name":"Louis","yearOfBirth":1901}
​
   // Deserialization (JSON string to Kotlin object)
​
   val obj = Json.decodeFromString<User>(string)
   println(obj) // User(name=Louis, yearOfBirth=1901)

其他示例:https://blog.jetbrains.com/kotlin/2020/10/kotlinx-serialization-1-0-released/

1szpjjfi

1szpjjfi3#

我在这里为Kotlin开发人员添加3个模板,它将解决JSON转换和解析问题。

//Json Array template
{
  "json_id": "12.4",
  "json_name": "name of the array",
  "json_image": "https://image_path",
  "json_description": "Description of the Json Array"
}

Kotlin模型类

data class JsonDataParser(
  @SerializedName("json_id") val id: Long, 
  @SerializedName("json_name") val name: String, 
  @SerializedName("json_image") val image: String,
  @SerializedName("json_description") val description: String
)

从模型类转换为Json字符串

val gson = Gson()
val json = gson.toJson(jsonDataParser)

从Json文件解析/Strong

val json = getJson()
val topic = gson.fromJson(json, JsonDataParser::class.java)

相关问题