【问题标题】:Parse JSON Object inside JSON Object在 JSON 对象中解析 JSON 对象
【发布时间】:2021-03-19 06:08:52
【问题描述】:

我想使用 Retrofit 解析 Json 对象。解析“电话”和“地址”的最佳方法是什么? 谢谢。

{
    "name": "Miss Piggy",
    "id": "13",
    "companyName": "Muppets, Baby",
    "isFavorite": false,
    "smallImageURL": "https://s3.amazonaws.com/technical-challenge/v3/images/miss-piggy-small.jpg",
    "largeImageURL": "https://s3.amazonaws.com/technical-challenge/v3/images/miss-piggy-large.jpg",
    "emailAddress": "Miss.Piggy@muppetsbaby.com",
    "birthdate": "1987-05-11",
    "phone": {
        "work": "602-225-9543",
        "home": "602-225-9188",
        "mobile": ""
    },
    "address": {
        "street": "3530 E Washington St",
        "city": "Phoenix",
        "state": "AZ",
        "country": "US",
        "zipCode": "85034"
    }
}

【问题讨论】:

标签: android json parsing retrofit


【解决方案1】:

您可以使用带有正确 retrofit converter 的 JSON 解析库(例如 GsonMoshi)来创建用于解析嵌入对象的类(kotlin 中的数据类)。

kotlin 中的一个例子。

响应类

data class Response (
    val name: String,
    val id: String,
    val companyName: String,
    val isFavorite: Boolean,
    val smallImageURL: String,
    val largeImageURL: String,
    val emailAddress: String,
    val birthdate: String,
    val phone: Phone,
    val address: Address) 

地址类

data class Address (
    val street: String,
    val city: String,
    val state: String,
    val country: String,
    val zipCode: String )

电话类

data class Phone (
    val work: String,
    val home: String,
    val mobile: String)

更多详情请查看Google's Codelab 示例

【讨论】:

    【解决方案2】:

    如果您打算从任何子 JSON 对象中获取任何字符串的值,那么使用 Android JAVA 的内置 JSON 解析器无需任何新库即可为您提供帮助。

    JSONObject jsonObject = new JSONObject(s);
    // extract phone object
    JSONObject phoneJsonObject = jsonObject.getJSONObject("phone");
    // we can any data of the sub json object of main object
    // get string value of work
    String valueOfWork = phoneJsonObject.getString("work");
    
    // extract address object
    JSONObject addressJsonObject = jsonObject.getJSONObject("address");
    // we can any data of the sub json object of main object
    // get string value of street
    String valueOfStreet = phoneJsonObject.getString("street");
    
    Log.i("Getting Value of Work from Phone Object", valueOfWork);
    Log.i("Getting Value of Street from Address Object", valueOfStreet);
    

    【讨论】:

      猜你喜欢
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      相关资源
      最近更新 更多