2

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())
}

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]"

or this

 [
"{\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}"
]

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

2
  • 1
    there is no jsonArray. how shall one know of the input, while only seeing messy output? Commented Aug 10, 2018 at 0:45
  • reformatted, although this is what in a string i'm receiving, i need to be formatted into a jsonarray and then its particular objects. i can read the jsonArray but when it comes down to object, these are all strings only. Commented Aug 10, 2018 at 1:08

1 Answer 1

8

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)

Or as an object:

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)
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.