当前位置: 首页 > 知识库问答 >
问题:

改型:处理数组或单个对象的问题

汲丰茂
2023-03-14

我一直在遵循其他答案,但有一个丢失的步骤,我找不到是导致调用成功,但数据没有被正确解析,因为我进行的第一次调用返回了一个对象列表,但只返回了一个对象,这是全空的

MyModel.java

    public class MyModel {
        @SerializedName("url")
        private String mUrl;

        @SerializedName("name")
        private String mName;

        @SerializedName("description")
        private String mDescription;
    }

myModelDeserializer.java

public class MyModelTypeAdapter implements JsonDeserializer<ArrayList<MyModel>>{

    @Override
    public ArrayList<MyModel> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
            ArrayList<MyModel> objects = new ArrayList<>();
            if(json.isJsonArray()){
                for(JsonElement e : json.getAsJsonArray()){
                    objects.add((MyModel)context.deserialize(e,MyModel.class));
                }
            }else if(json.isJsonObject()){
                objects.add((MyModel)context.deserialize(json,MyModel.class));
            }
        return objects;
    }
}
 Gson gson = new GsonBuilder()
                    .registerTypeAdapter(new TypeToken<ArrayList<MyModel>>() {}.getType(), new MyModelTypeAdapter())
                    .create();
 restAdapter = new RestAdapter.Builder()
                    .setEndpoint(BuildConstants.BASE_URL)
                    .setConverter(new GsonConverter(gson))
                    .setClient(new OkClient(okHttpClient))
                    .setLogLevel(RestAdapter.LogLevel.FULL)
                    .build();
@GET(URLConstants.LIST_URL)
    void getData(Callback<ArrayList<MyModel>> callback);
{
  "places": [
    {
      "url": "www.google.com",
      "name": "Google",
      "description": "Search engine"
    },
    {
      "url": "www.Facebook.com",
      "name": "Facebook",
      "description": "Social Network"
    },

    {
      "url": "www.amazon.com",
      "name": "Amazon",
      "description": "Shopping"
    }
]
  }

共有1个答案

阎自怡
2023-03-14

首先创建一个POJO类来处理JSON。您可以使用jsonschema2pojo为您的JSON创建pojo类:

public class MyModel {

    @Expose
    private List<Place> places = new ArrayList<Place>();

    /**
     *
     * @return
     * The places
     */
    public List<Place> getPlaces() {
        return places;
    }

    /**
     *
     * @param places
     * The places
     */
    public void setPlaces(List<Place> places) {
        this.places = places;
    }

}

public class Place {

    @Expose
    private String url;
    @Expose
    private String name;
    @Expose
    private String description;

    /**
     *
     * @return
     * The url
     */
    public String getUrl() {
        return url;
    }

    /**
     *
     * @param url
     * The url
     */
    public void setUrl(String url) {
        this.url = url;
    }

    /**
     *
     * @return
     * The name
     */
    public String getName() {
        return name;
    }

    /**
     *
     * @param name
     * The name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     *
     * @return
     * The description
     */
    public String getDescription() {
        return description;
    }

    /**
     *
     * @param description
     * The description
     */
    public void setDescription(String description) {
        this.description = description;
    }

}

接下来,创建一个restadapter,如下所示:

public class SimpleRestClient {

private SimpleRestApi simpleRestApi;

public SimpleRestClient() {

    RestAdapter restAdapter = new RestAdapter.Builder()
            .setLogLevel(RestAdapter.LogLevel.FULL)
            .setEndpoint(Constants.BASE_URL)
            .build();

    simpleRestApi = restAdapter.create(SimpleRestApi.class);

}

public SimpleRestApi getSimpleRestApi() {

    return simpleRestApi;

}

}

现在创建api接口。这里我们设置POJO类来处理json响应:

public interface SimpleRestApi {

@GET("Enter URL")
public void getSimpleResponse(Callback<MyModel> handlerCallback);

}
simpleRestApi = new SimpleRestClient().getSimpleRestApi();
    simpleRestApi.getSimpleResponse(new Callback<MyModel>() {
        @Override
        public void success(MyModel responseHandler, Response response) {
            // here you can get your url, name and description.
        }

        @Override
        public void failure(RetrofitError error) {
            progress.dismiss();
            Log.e("CLASS", "JSON: " + error.getCause());
        }
    });
 类似资料:
  • 客户端在关于 JSON 数组和 JSON 对象的处理和定义方面总是令人疑惑不已。尤其是由空对象和对象数组引起的问题。本节会展示一些 Elasticsearch JSON API 常见的数据格式,还会说明如何以 PHP 的语法来表达这些数据格式。 空对象 Elasticsearch API 在几个地方使用了空对象,这会对 PHP 造成影响。不像其它的语言,PHP 没有一个简便的符号来表示空对象,而许

  • 我有一个包含对象和数组的嵌套数据结构。如何提取信息,即访问特定或多个值(或键)? 例如: 如何访问中第二个项目的?

  • 问题内容: 我有一个包含对象和数组的嵌套数据结构。如何提取信息,即访问特定或多个值(或键)? 例如: 如何访问中的第二项? 问题答案: Preliminaries JavaScript只有一种可以包含多个值的数据类型: Object 。一个 阵列 是对象的一种特殊形式。 (普通)对象具有以下形式 数组具有以下形式 数组和对象都公开一个结构。数组中的键必须是数字,而任何字符串都可以用作对象中的键。键

  • 来自API的Im有两个不同的响应。然后我判断对象,但是我如何将消息的内容返回到字符串呢?下面的示例返回Exception: Json响应: Json响应: 模型:

  • 类似于Jersey:带有1个元素的Json数组被序列化为object,但在客户端。例如,我收到一个JSON对象,其中一个字段是一个数组,但如果只有一个元素,它就是一个单独的对象。 对 我正在使用 Jersey/Genson 解析/取消编组 JSON。当然,如果JSON与目标类不匹配,我会收到错误(例如) 我已经阅读了很多关于这个错误以及如何在服务器端创建JSON对象时如何避免的信息,但是我没有发现

  • 我使用Nodejs,有一个对象包含一个object数组(API请求的结果)和一个简单的值数组。 它们看起来是这样的: 如何将包含对象数组的对象与简单数组进行比较? 我要找的是,从简单数组中获取ID,并将它们与另一个“复杂”对象进行比较,以检索属性以及简单数组中的相应ID和另一个对象属性,然后将结果存储在一个对象数组中。 简单来说,我希望有这样的结果: 当从API请求中检索“复杂”对象时,我尝试了以