【问题标题】:Parse JSON string to JsonObject/Map/MutableMap on Kotlin在 Kotlin 上将 JSON 字符串解析为 JsonObject/Map/MutableMap
【发布时间】:2023-03-03 04:31:01
【问题描述】:

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

【问题讨论】:

  • 我猜我得到的第二个错误是因为在 followed_tag_names 这样的键中发现了空数组,但这应该由解析器处理,不是吗?

标签: android kotlin klaxon


【解决方案1】:

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,它运行良好,

【讨论】:

  • 真的很感激,简单的解决方案,效果很好。
【解决方案2】:

要在 Klaxon 中执行此操作,您可以执行以下操作:

Klaxon().parse<Map<String,Any>>(jsonString)!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 2011-03-14
    • 1970-01-01
    • 2012-12-27
    • 2018-12-19
    • 1970-01-01
    相关资源
    最近更新 更多