如何在 android studio 上使用 klaxon 从 thingspeak 解析 json 以获取字段值?

Posted

技术标签:

【中文标题】如何在 android studio 上使用 klaxon 从 thingspeak 解析 json 以获取字段值?【英文标题】:How do I parse the json from thingspeak to get the field value using klaxon on android studio? 【发布时间】:2020-08-26 12:32:09 【问题描述】:

我正在使用 thingspeak,并且我已经成功让 thingspeak 使用 okhttp 获取 json 数据,但我不知道如何使用 klaxon 正确解析它。

这里是代码

private fun funButton1() 
    println("Attempting to get JSON data!")
    val url = "https://api.thingspeak.com/channels/1029606/feeds.json?results=1"

    val request = Request.Builder().url(url).build()

    val client = OkHttpClient()
    client.newCall(request).enqueue(object: Callback 
        override fun onResponse(call: Call, response: Response) 
            val body = response.body?.string()
            println(body)
            class feeds (val field1: String)
            val result = Klaxon()
                .parse<feeds>(body.toString())

            textView.text = result
        
        override fun onFailure(call: Call, e: IOException) 
            println("Failed to execute request!")
        

    )

这是来自 thingspeak 的 json 数据

    
  "channel": 
    "id": 1029606,
    "name": "LED ",
    "description": "Acts as a medium for the phone and arduino \r\nRules : 1 = LED ON 0 = LED OFF ",
    "latitude": "0.0",
    "longitude": "0.0",
    "field1": "LED STATUS",
    "created_at": "2020-04-01T17:19:03Z",
    "updated_at": "2020-04-01T17:20:39Z",
    "last_entry_id": 25
  ,
  "feeds": [
    
      "created_at": "2020-05-11T02:58:07Z",
      "entry_id": 25,
      "field1": "1"
    
  ]

我试图获取值为 1 的 field1 的值,但我不知道该怎么做,因为我很愚蠢。但我希望有人能告诉我如何正确使用 klaxon 来获取 json 数据。

【问题讨论】:

您可以使用 klaxon 提供的对象绑定 api。我会使用诸如kotlinx.serialization 之类的非反射库来处理不需要流式api 的json,这些在对象绑定api 中更快。 【参考方案1】:

对于 Klaxon,您需要创建一个表示 JSON 结构的类。 f.e.如果你得到一个 JSON:


    "username": "admin",
    "password": "admin"

你想创建一个看起来像这样的类:

class myClass(val username:String, val password:String)

然后,您可以像现在一样解析它。 对于您的 JSON,您需要一个更大的类。 为简单起见,我将只为提要创建一个类,为频道创建一个类:

class Feed(val created_at:String, val entry_id: Int, val field1:String)
class Channel(val id: Int, val name: String, val description: String, val latitude: String, val longitude:String, val field1: String, val created_at: String, val updated_at: String, val last_entry_id: Int)

然后你可以使用这个类来解析你的 JSON:

class Thingspeak(val channel: Channel, val feeds: ArrayList<Feed>)

如果它对你有用,请告诉我!

【讨论】:

这些类可以工作,但我如何解析它并将字段 1 的值变成一个字符串? 所以你不需要整个 JSON,而只需要 field1?

以上是关于如何在 android studio 上使用 klaxon 从 thingspeak 解析 json 以获取字段值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android Studio上使用Json?

如何在Android Studio上使用Github

如何在mac上安装android studio

如何在 Ubuntu 上使用电容器在 android-studio 上运行 Ionic 应用程序?

如何使用android studio在flutter上加载图像

即使使用未翻译的字符串,如何在 Android Studio 上签署 APK?