如何在 kotlin 中生成一个 json 对象?

Lui*_*ppo 8 android kotlin

我是编程新手,最近在 Kotlin 中使用 Android Studio 启动了一个项目。

所以,我有一个 JSON 对象的问题。我从 BroadcastReceiver 对象获取数据,更具体地说是一个字符串,具有下一个格式:

{"s1":1}
Run Code Online (Sandbox Code Playgroud)

这是一个简单的字符串。所以我接受了对 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
}
Run Code Online (Sandbox Code Playgroud)

我这样做是正确的吗?,我该如何改进我的代码?

感谢您的帮助,并为我的英语感到抱歉!

GV_*_*Qst 16

欢迎使用 StackOverflow!

在 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)
Run Code Online (Sandbox Code Playgroud)

这样你就不会直接使用 JSON 字符串,而是使用类型安全且更方便的 Kotlin 对象。查看文档。它非常大且易于理解

这里有一些教程:

更新:如果你真的想使用 JSONObject 然后使用它的构造函数和一个字符串参数,它会自动解析你的 JSON 字符串。

val jsonObject = JSONObject(data)
Run Code Online (Sandbox Code Playgroud)


fis*_*sio 11

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

\n
import kotlinx.serialization.*\nimport kotlinx.serialization.json.*\n\xe2\x80\x8b\n@Serializable\ndata class User(val name: String, val yearOfBirth: Int)\n\xe2\x80\x8b\n   // Serialization (Kotlin object to JSON string)\n\xe2\x80\x8b\n   val data = User("Louis", 1901)\n   val string = Json.encodeToString(data)\n   println(string) // {"name":"Louis","yearOfBirth":1901}\n\xe2\x80\x8b\n   // Deserialization (JSON string to Kotlin object)\n\xe2\x80\x8b\n   val obj = Json.decodeFromString<User>(string)\n   println(obj) // User(name=Louis, yearOfBirth=1901)\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n


Tak*_*nia 5

我在这里为 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"
}
Run Code Online (Sandbox Code Playgroud)

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
)
Run Code Online (Sandbox Code Playgroud)

从模型类转换为 Json 字符串

val gson = Gson()
val json = gson.toJson(jsonDataParser)
Run Code Online (Sandbox Code Playgroud)

从Json文件解析/强

val json = getJson()
val topic = gson.fromJson(json, JsonDataParser::class.java)
Run Code Online (Sandbox Code Playgroud)