droid中使用Kotlin将字符串化的json转换为jsonA

droid中使用Kotlin将字符串化的json转换为jsonA

本文介绍了在Android中使用Kotlin将字符串化的json转换为jsonArray的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将此字符串转换为jsonArray.

I'm trying to convert this string to jsonArray.

for (jsonIndex in 0..(jsonArray.length() - 1)) {
          Log.d("JSON", jsonArray.getJSONObject(jsonIndex).getString("translation").toString())
}

但是,事实证明这不是一个对象,而是一个字符串,由于someString的方式,我可以肯定它是一个字符串.有什么方法可以修复此字符串,还是应该继续进行?

however, this turns out not to be an object but a string, I'm quite sure its because of the way the someString is. Is there a way i could either fix this string or how should i proceed further?

 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读取此格式.

we're saving this to firebase and its encoding \ to it, now i need this format to be readable from gson again.

推荐答案

您需要两次分析损坏的JSON.
一次获取字符串列表:

You need to parse your broken JSON twice.
One time to get list of strings:

val listOfStrings = Gson().fromJson(wordReview, mutableListOf<String>().javaClass)

另一个解析每个字符串.
要么作为地图:

And the other to parse each string.
Either as a map:

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)

要在修改后将其转换回字符串,可以使用:

To convert it back to string once modified you can use:

Gson().toJson(asObject)

这篇关于在Android中使用Kotlin将字符串化的json转换为jsonArray的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-20 23:39