标签: klaxon

在 Kotlin 中解析 json

我正在尝试在 Kotlin 中解析 Json。我遇到了很多麻烦,似乎很多人在 Java 之后学习 Kotlin...不是我,我是 Python 爱好者。我的 Kotlin Jupyter Notebook 运行得相当快(https://github.com/ligee/kotlin-jupyter),之后我设法从 bittrex api 中提取信息,如下所示:

import java.net.URL
val result = URL("https://bittrex.com/api/v1.1/public/getmarkets").readText()
Run Code Online (Sandbox Code Playgroud)

我花了很长时间才发现我需要添加 import java.net.URL,这似乎总是隐含在所有代码示例中。不管怎样,这给了我一个 json 的响应(“结果参数”):

{"success":true,"message":"","result":[{"MarketCurrency":"LTC","BaseCurrency":"BTC","MarketCurrencyLong":"Litecoin","BaseCurrencyLong":"Bitcoin","MinTradeSize":0.01469482,"MarketName":"BTC-LTC","IsActive":true,"Created":"2014-02-13T00:00:00","Notice":null,"IsSponsored":null,"LogoUrl":"https://bittrexblobstorage.blob.core.windows.net/public/6defbc41-582d-47a6-bb2e-d0fa88663524.png"},{"MarketCurrency":"DOGE","BaseCurrency":"BTC","MarketCurrencyLong":"Dogecoin","BaseCurrencyLong":"Bitcoin","MinTradeSize":274.72527473,"MarketName":"BTC-DOGE","IsActive":true,"Created":"2014-02-13T00:00:00","Notice":null,"IsSponsored":null,"LogoUrl":"https://bittrexblobstorage.blob.core.windows.net/public/a2b8eaee-2905-4478-a7a0-246f212c64c6.png"},{"MarketCurrency ...
Run Code Online (Sandbox Code Playgroud)

现在,在 Python 中,我只需将 .json() 添加到“结果”参数中,然后我就可以将 json 字段作为具有多个级别的字典进行寻址,例如

result["success"]
Run Code Online (Sandbox Code Playgroud)

会给我:

true
Run Code Online (Sandbox Code Playgroud)

Kotlin 有类似的东西吗?我尝试过 Klaxon https://github.com/cbeust/klaxon,我又花了很多时间才意识到我必须这样做import com.beust.klaxon.string,例如网站上没有提到,所以一个附带问题是:如何做当您找到代码示例时,您知道需要导入什么吗?似乎每个人都知道...但我离题了。

我的主要问题是:如何处理 Json 的单独字段并将它们放入单独的变量中?

致以最崇高的敬意。

json kotlin jupyter-notebook klaxon

5
推荐指数
1
解决办法
8408
查看次数

Android Kotlin + Klaxon-解析JSON根数组

我有一个带有根数组的JSON资产:

[
  {
    "word": "word",
    "label": "label"
  },
  {
    "word": "word2",
    "label": "label2"
  }
]
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用Klaxon进行解析。

到目前为止,我已经尝试了几种方法:

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") )
Run Code Online (Sandbox Code Playgroud)

导致空列表或异常:

java.lang.ClassCastException:com.beust.klaxon.JsonArray无法转换为com.beust.klaxon.JsonObject

我究竟做错了什么?

arrays android json kotlin klaxon

4
推荐指数
1
解决办法
2433
查看次数

在 Kotlin 上将 JSON 字符串解析为 JsonObject/Map/MutableMap

我对 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}"
Run Code Online (Sandbox Code Playgroud)

我试过使用 Gson 和Klaxon包,但没有任何运气。我最近使用 Klaxon 的尝试如下所示:

val json: JsonObject? = Klaxon().parse<JsonObject>(jsonString)
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误: java.lang.String cannot be cast to com.beust.klaxon.JsonObject

我还尝试"在字符串的开头和结尾修剪双引号 ( ),并删除所有反斜杠,如下所示:

val jsonString = rawStr.substring(1,rawStr.length-1).replace("\\", "")
Run Code Online (Sandbox Code Playgroud)

但是当运行相同的 Klaxon 解析时,我现在收到以下错误: com.beust.klaxon.KlaxonException: Unable to instantiate JsonObject with parameters []

任何将此字符串解析为对象的建议(有或没有 Klaxon)将不胜感激!这不要紧,如果结果是JsonObjectMap或自定义类,只要我可以访问解析JSON数据:)

android kotlin klaxon

4
推荐指数
2
解决办法
4806
查看次数

标签 统计

klaxon ×3

kotlin ×3

android ×2

json ×2

arrays ×1

jupyter-notebook ×1