我对Kotlin还是很陌生,在处理基本的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)都将不胜感激!只要我可以访问已解析的JSON数据,结果是JsonObjectMap还是自定义类都没有关系:)

最佳答案

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-string,它非常有效,

android - 将JSON字符串解析为Kotlin上的JsonObject/Map/MutableMap-LMLPHP

08-18 10:24