android - 在android中使用kotlin将字符串化的json转换为jsonArray
问题描述
我正在尝试将此字符串转换为 jsonArray。
for (jsonIndex in 0..(jsonArray.length() - 1)) {
Log.d("JSON", jsonArray.getJSONObject(jsonIndex).getString("translation").toString())
}
然而,结果证明这不是一个对象而是一个字符串,我很确定它是因为 someString 的方式。有没有办法可以修复这个字符串或者我应该如何继续?
val wordReview = "[\n \"{\\n \\\"assignUser\\\" : false,\\n \\\"transliteration\\\" : \\\"wa\\\",\\n \\\"lessonNumber\\\" : 1,\\n \\\"seen\\\" : 5,\\n \\\"arabicWord\\\" : \\\"وَ\\\",\\n \\\"translation\\\" : \\\"and\\\",\\n \\\"priority\\\" : 2\\n}\",\n \"{\\n \\\"assignUser\\\" : false,\\n \\\"transliteration\\\" : \\\"Maryam\\\",\\n \\\"lessonNumber\\\" : 1,\\n \\\"seen\\\" : 4,\\n \\\"arabicWord\\\" : \\\"مَرْيَمَ\\\",\\n \\\"translation\\\" : \\\"Maryam\\\",\\n \\\"priority\\\" : 3\\n}\",\n \"{\\n \\\"assignUser\\\" : false,\\n \\\"transliteration\\\" : \\\"allati\\\",\\n \\\"lessonNumber\\\" : 1,\\n \\\"seen\\\" : 4,\\n \\\"arabicWord\\\" : \\\"الَّتِي\\\",\\n \\\"translation\\\" : \\\"the one who\\\",\\n \\\"priority\\\" : 6\\n}\",\n \"{\\n \\\"assignUser\\\" : false,\\n \\\"transliteration\\\" : \\\"min\\\",\\n \\\"lessonNumber\\\" : 1,\\n \\\"seen\\\" : 4,\\n \\\"arabicWord\\\" : \\\"مِنْ\\\",\\n \\\"translation\\\" : \\\"from\\\",\\n \\\"priority\\\" : 3\\n}\",\n \"{\\n \\\"assignUser\\\" : false,\\n \\\"transliteration\\\" : \\\"kaanat\\\",\\n \\\"lessonNumber\\\" : 1,\\n \\\"seen\\\" : 5,\\n \\\"arabicWord\\\" : \\\"كَانَتْ\\\",\\n \\\"translation\\\" : \\\"was\\\",\\n \\\"priority\\\" : 2\\n}\",\n \"{\\n \\\"assignUser\\\" : false,\\n \\\"transliteration\\\" : \\\"rabbuha\\\",\\n \\\"lessonNumber\\\" : 1,\\n \\\"seen\\\" : 3,\\n \\\"arabicWord\\\" : \\\"رَبُّهَا\\\",\\n \\\"translation\\\" : \\\"her Lord\\\",\\n \\\"priority\\\" : 4\\n}\",\n \"{\\n \\\"assignUser\\\" : false,\\n \\\"transliteration\\\" : \\\"'Imran\\\",\\n \\\"lessonNumber\\\" : 1,\\n \\\"seen\\\" : 4,\\n \\\"arabicWord\\\" : \\\"عِمْرَان\\\\n\\\",\\n \\\"translation\\\" : \\\"Imran\\\",\\n \\\"priority\\\" : 3\\n}\"\n]"
或这个
[
"{\n \"assignUser\" : false,\n \"transliteration\" : \" mann\",\n \"lessonNumber\" : 4,\n \"seen\" : 2,\n \"arabicWord\" : \"مَنْ\",\n \"translation\" : \" who\",\n \"priority\" : 10\n}",
"{\n \"assignUser\" : false,\n \"transliteration\" : \"'inda\",\n \"lessonNumber\" : 4,\n \"seen\" : 2,\n \"arabicWord\" : \"عِندَ\",\n \"translation\" : \"near\\\/with\",\n \"priority\" : 10\n}"
]
我们将其保存到 firebase 并将其编码 \ 保存到它,现在我需要这种格式才能再次从 gson 读取。
解决方案
您需要两次解析损坏的 JSON。
一次获取字符串列表:
val listOfStrings = Gson().fromJson(wordReview, mutableListOf<String>().javaClass)
另一个来解析每个字符串。
要么作为地图:
val asMap = Gson().fromJson(listOfStrings[0], mutableMapOf<String, Any>().javaClass)
或者作为一个对象:
data class MyObj(val assignUser: Boolean,
val transliteration: String,
val lessonNumber: Float,
val seen: Float,
val arabicWord: String,
val translation: String,
val priority: Float)
val asObject = Gson().fromJson(listOfStrings[1], MyObj::class.java)
修改后要将其转换回字符串,您可以使用:
Gson().toJson(asObject)
推荐阅读
- android - 在 Android 上禁用 Toast
- reactjs - 我想用 React js 写其他语言的代码
- c - 我可以使用 libav 流式传输实时音频吗?
- java - 我可以在另一个DAO的方法体中调用多个DAO,通过ResultSet填充参数并返回一个对象吗?
- android - 无法在 C 盘以外的其他位置构建 Flutter 应用程序
- python - 用键和值按字典计算列表中出现的次数
- ibm-integration-bus - IBM Integration BUS Callable Flow Throwing 异常,需要返回上下文信息
- django - Flutter google 登录验证 django social auth for google
- sas - SAS 宏变量在变量名 Proc Http 中转义撇号
- java - 我没有在电话身份验证系统中从 firebase 收到 Otp