【问题标题】:convert stringified json to jsonArray using kotlin in android在android中使用kotlin将字符串化的json转换为jsonArray
【发布时间】:2018-08-10 00:35:52
【问题描述】:

我正在尝试将此字符串转换为 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 读取这种格式。

【问题讨论】:

  • 没有jsonArray。一个人怎么知道输入,而只看到混乱的输出?
  • 重新格式化,虽然这是我收到的字符串中的内容,但我需要格式化为一个 jsonarray,然后是它的特定对象。我可以读取 jsonArray 但归结为对象,这些只是字符串。

标签: android json kotlin gson


【解决方案1】:

您需要两次解析损坏的 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)

【讨论】:

    猜你喜欢
    • 2021-01-03
    • 2023-03-07
    • 2017-06-04
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多