如何在 Kotlin (Anko) 中解析 JSON?
How to parse a JSON in Kotlin (Anko)?
我已经使用 Anko 在 Kotlin 中得到一个 JSON,它运行良好,但我不知道如何访问每个值。
我有这段代码可以打印出整个 JSON:
doAsync {
val result = URL("url.json").readText()
uiThread {
longToast(result)
}
}
现在我有了整个 JSON,如何访问每个字段?
我试过 result[0].toString()
和 result.get(0).toString()
但它没有用,因为它打印出 result
的第一个字符 [
使用 JSONArray
和 JSONObject
解析 json,如下所示。
在Java:
JSONArray jsonArray = new JSONArray(result);
for (int i=0; i<jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String user = jsonObject.getString("user");
String password = jsonObject.getString("password");
}
在Kotlin中:
val jsonArray = JSONArray(result)
for (i in 0 until jsonArray.length()) {
val jsonObject = jsonArray.getJSONObject(i)
val user = jsonObject.getString("user")
val password = jsonObject.getString("password")
}
有一个很酷的 kotlinx 库叫做 Kotlinx.Serialization
在rootbuild.gradle
buildScript {
...
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
}
使用 @Serializable
注释(用于您的自定义 class )
对于反序列化使用:-
Json.parse(YourClass.serializer() ,resultJson) // this will deserialize
对于序列化使用:-
Json.stringify(YourClass.serializer(), yourClassObj) // this will give string value of the json
For more info check this.
我已经使用 Anko 在 Kotlin 中得到一个 JSON,它运行良好,但我不知道如何访问每个值。
我有这段代码可以打印出整个 JSON:
doAsync {
val result = URL("url.json").readText()
uiThread {
longToast(result)
}
}
现在我有了整个 JSON,如何访问每个字段?
我试过 result[0].toString()
和 result.get(0).toString()
但它没有用,因为它打印出 result
的第一个字符 [
使用 JSONArray
和 JSONObject
解析 json,如下所示。
在Java:
JSONArray jsonArray = new JSONArray(result);
for (int i=0; i<jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String user = jsonObject.getString("user");
String password = jsonObject.getString("password");
}
在Kotlin中:
val jsonArray = JSONArray(result)
for (i in 0 until jsonArray.length()) {
val jsonObject = jsonArray.getJSONObject(i)
val user = jsonObject.getString("user")
val password = jsonObject.getString("password")
}
有一个很酷的 kotlinx 库叫做 Kotlinx.Serialization
在rootbuild.gradle
buildScript {
...
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
}
使用 @Serializable
注释(用于您的自定义 class )
对于反序列化使用:-
Json.parse(YourClass.serializer() ,resultJson) // this will deserialize
对于序列化使用:-
Json.stringify(YourClass.serializer(), yourClassObj) // this will give string value of the json
For more info check this.