4

私は 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 データにアクセスできる限り、結果が であるかカスタム クラスであるかJsonObjectは問題ではありません:)Map

4

2 に答える 2

6

Gsonは、この種のタスクに最適なライブラリです。ここでは、gson を使用してそれを行う方法を示します。

コトリンの実装、

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を試してみましたが、完全に機能しています。

ここに画像の説明を入力

于 2020-03-25T14:24:30.373 に答える