Разобрать JSON строку в JsonObject / Map / MutableMap на Kotlin - PullRequest
1 голос
/ 25 марта 2020

Я довольно новичок в Kotlin, и у меня возникают проблемы с манипулированием базисной c JSON строкой для доступа к ее содержимому. Строка JSON выглядит следующим образом:

"{\"id\":24,\"name\":\"nope\",\"username\":\"unavailable1991\",\"profile_image_90\":\"/uploads/user/profile_image/24/23102ca5-1412-489d-afdf-235c112c7d8e.jpg\",\"followed_tag_names\":[],\"followed_tags\":\"[]\",\"followed_user_ids\":[],\"followed_organization_ids\":[],\"followed_podcast_ids\":[],\"reading_list_ids\":[],\"blocked_user_ids\":[],\"saw_onboarding\":true,\"checked_code_of_conduct\":true,\"checked_terms_and_conditions\":true,\"number_of_comments\":0,\"display_sponsors\":true,\"trusted\":false,\"moderator_for_tags\":[],\"experience_level\":null,\"preferred_languages_array\":[\"en\"],\"config_body_class\":\"default default-article-body pro-status-false trusted-status-false default-navbar-config\",\"onboarding_variant_version\":\"8\",\"pro\":false}"

Я безуспешно пытался использовать пакеты Gson и Klaxon . Моя последняя попытка использования Klaxon выглядела так:

val json: JsonObject? = Klaxon().parse<JsonObject>(jsonString)

Но я получаю следующую ошибку: java.lang.String cannot be cast to com.beust.klaxon.JsonObject

Я также пытался обрезать двойные кавычки (") в начале и конец строки, а также удаляя все обратные слеши, как это:

val jsonString = rawStr.substring(1,rawStr.length-1).replace("\\", "")

Но при запуске того же разбора Klaxon я теперь получаю следующую ошибку: com.beust.klaxon.KlaxonException: Unable to instantiate JsonObject with parameters []

Любые предложения ( с или без Klaxon), чтобы проанализировать эту строку в объект будет принята с благодарностью! Не имеет значения, является ли результат JsonObject, Map или пользовательским классом, если я могу получить доступ к проанализированным JSON данным:)

1 Ответ

1 голос
/ 25 марта 2020

Gson - идеальная библиотека для такого рода задач, вот как это сделать с помощью Gson.

Kotlin реализация,

var map: Map<String, Any> = HashMap()
map = Gson().fromJson(jsonString, map.javaClass)

Или, если вы хотите попробовать с Java,

Gson gson = new Gson(); 
Map<String,Object> map = new HashMap<String,Object>();
map = (Map<String,Object>) gson.fromJson(jsonString, map.getClass());

А также я только что попробовал с вашим json и отлично работает,

enter image description here

...