I have a JSON asset with a root array:
[
{
"word": "word",
"label": "label"
},
{
"word": "word2",
"label": "label2"
}
]
I'm trying to parse it using Klaxon.
So far I have tried several methods:
val wordDict = Klaxon().parse<List<DictWord>>( activity.assets.open("dict.json") )
val wordDict = Klaxon().parse<Array<DictWord>>( activity.assets.open("dict.json") )
val wordDict = Klaxon().parse<JsonArray<DictWord>>( activity.assets.open("dict.json") )
Which either result in an empty list or an exception:
java.lang.ClassCastException: com.beust.klaxon.JsonArray cannot be cast to com.beust.klaxon.JsonObject
What am I doing wrong?
Found the answer in Klaxon's GitHub issue board: https://github.com/cbeust/klaxon/issues/87
Array parsing is done via parseArray()
, so the fix was:
val wordDict = Klaxon().parseArray<DictWord>( activity.assets.open("dict.json") )
It is worth mentioning that array parsing is only supported via the streaming API, not the object mapping API. So we are limited to either supplying an InputStream
or a String
as an argument.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With