我是编程新手,最近在 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>
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)\nRun Code Online (Sandbox Code Playgroud)\n更多示例: https: //blog.jetbrains.com/kotlin/2020/10/kotlinx-serialization-1-0-released/
\n我在这里为 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)
| 归档时间: |
|
| 查看次数: |
27865 次 |
| 最近记录: |