解析只有根的 JSON 文件 - Android

Posted

技术标签:

【中文标题】解析只有根的 JSON 文件 - Android【英文标题】:Parse a JSON file with only root - Android 【发布时间】:2020-06-25 14:40:30 【问题描述】:

我还需要从电影数据库中解析一个 JSON 结构:

    [
  
    "iso_3166_1": "AD",
    "english_name": "Andorra"
  ,
  
    "iso_3166_1": "AE",
    "english_name": "United Arab Emirates"
  , 

这是我的 API 服务:

@GET("configuration/countries")
Call<LanguageModel> getLanguages(
        @Query("api_key") String apiKey);

我创建了这个模型来检索数据:

import com.google.gson.annotations.SerializedName;

import java.io.Serializable;

public class LanguageModel implements Serializable 
    @SerializedName("iso_3166_1")
    private String id;
    @SerializedName("english_name")
    private String originalLanguage;

    public String getId() 
        return id;
    

    public void setId(String id) 
        this.id = id;
    

    public String getOriginalLanguage() 
        return originalLanguage;
    

    public void setOriginalLanguage(String originalLanguage) 
        this.originalLanguage = originalLanguage;
    

然后,我进行了此调用以将所有值对放入 HashMap:

private HashMap<String, String> initializeMapLang() 
    HashMap<String, String> tmp = new HashMap<>();
    ApiService apiService = ApiBuilder.getClient(DetailActivity.this).create(ApiService.class);
    Call<LanguageModel> call = apiService.getLanguages(BuildConfig.API_KEY);
    call.enqueue(new Callback<LanguageModel>() 
        @Override
        public void onResponse(Call<LanguageModel> call, Response<LanguageModel> response) 
            Pair<String, String> resultLang =  new Pair<>(response.body().getId(), response.body().getOriginalLanguage());
            tmp.put(resultLang.first, resultLang.second);
        

        @Override
        public void onFailure(Call<LanguageModel> call, Throwable t)  
    );
    return tmp;

问题是我没有得到任何回应。我的模型正确吗?

【问题讨论】:

【参考方案1】:

您的 api 服务正在返回 LanguageModel 的平面列表。 Retrofit 可以为你处理这个问题,你需要做的就是改变端点定义

@GET("configuration/countries")
Call<LanguageModel> getLanguages(
        @Query("api_key") String apiKey);

@GET("configuration/countries")
Call<List<LanguageModel>> getLanguages(
        @Query("api_key") String apiKey);

【讨论】:

以上是关于解析只有根的 JSON 文件 - Android的主要内容,如果未能解决你的问题,请参考以下文章

使用 json2csv nodejs 的 JSON 到 CSV 文件

SQL 使用具有 2 个根的 FOR JSON PATH 生成 JSON 字符串

Android A/B system - bootctrl

Android A/B system - bootctrl

RapidJSON解析数组

用php解析json里面的内容,然后打印出来