JSON对象内部而不是阵列中的多个JSON对象

JSON对象内部而不是阵列中的多个JSON对象

问题描述:

我正在使用提供以下响应的API。 (为简单起见,我已将数据内的对象数量减少到2个)。JSON对象内部而不是阵列中的多个JSON对象

{ 
"Response": "Success", 
"Message": "Coin list succesfully returned!", 
"BaseImageUrl": "https://www.cryptocompare.com", 
"BaseLinkUrl": "https://www.cryptocompare.com", 
"Data": { 
      "42": { 
      "Id": "4321", 
      "Url": "/coins/42/overview", 
      "ImageUrl": "/media/19984/42.png", 
      "Name": "42", 
      "CoinName": "42 Coin", 
      "FullName": "42 Coin (42)", 
      "Algorithm": "Scrypt", 
      "ProofType": "PoW", 
      "FullyPremined": "0", 
      "TotalCoinSupply": "42", 
      "PreMinedValue": "N/A", 
      "TotalCoinsFreeFloat": "N/A", 
      "SortOrder": "34" 
      }, 
      "365": { 
      "Id": "33639", 
      "Url": "/coins/365/overview", 
      "ImageUrl": "/media/352070/365.png", 
      "Name": "365", 
      "CoinName": "365Coin", 
      "FullName": "365Coin (365)", 
      "Algorithm": "X11", 
      "ProofType": "PoW/PoS", 
      "FullyPremined": "0", 
      "TotalCoinSupply": "2300000000", 
      "PreMinedValue": "N/A", 
      "TotalCoinsFreeFloat": "N/A", 
      "SortOrder": "916" 
      } 
}, 
"Type": 100 
} 

我想将所有对象放在数据中的数组中,以便我可以将它们传递给我的RecyclerView的适配器。

我利用Retrofit2和RxJava2进行网络操作。

这是我改装制造商此刻的代码:http://www.jsonschema2pojo.org/

我已编辑类数据,以便它包含:

Retrofit retrofit = new Retrofit.Builder() 
        .baseUrl(BASE_URL) 
        .client(client) 
        .addConverterFactory(GsonConverterFactory.create()) 
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) 
        .build(); 

我使用也产生了POJO类硬币和数据数组硬币而不是单个对象:

public class Data { 
@SerializedName("Coin") 
    @Expose 
    private Coin[] coins; 

    public Coin[] getCoin() { 
     return coins; 
    } 

    public void setCoins(Coin[] coins){} 
} 

我会如何去添加数据中的所有对象到Coin数组? 我是否需要创建自定义转换器,如果是,我该如何实现?

在此先感谢!

这是你的数据类:

import com.google.gson.Gson; 
import com.google.gson.TypeAdapter; 
import com.google.gson.annotations.JsonAdapter; 
import com.google.gson.stream.JsonReader; 
import com.google.gson.stream.JsonWriter; 

import java.io.IOException; 
import java.util.ArrayList; 


@JsonAdapter(Data.DataJsonAdapter.class) 
public class Data { 
    private Coin[] coins; 

    public Coin[] getCoin() { 
     return coins; 
    } 

    public void setCoins(Coin[] coins) { 
     this.coins = coins; 
    } 

    public static class DataJsonAdapter extends TypeAdapter<Data> { 
     @Override 
     public void write(JsonWriter out, Data value) throws IOException { 
      // TODO: Maybe implement 
     } 

     @Override 
     public Data read(JsonReader reader) throws IOException { 
      ArrayList<Coin> coins = new ArrayList<>(); 
      Gson gson = new Gson(); 
      reader.beginObject(); 
      while (reader.hasNext()) { 
       reader.nextName(); // Read "42", "365", ... 
       coins.add(gson.fromJson(reader, Coin.class)); 
      } 
      reader.endObject(); 

      Data data = new Data(); 
      // Can probably be simplified 
      Coin[] array = new Coin[coins.size()]; 
      coins.toArray(array); // fill the array 
      data.setCoins(array); 

      return data; 
     } 
    } 
} 

然后在某处你的代码,只要致电:

Gson gson = new Gson(); 
Data data = gson.fromJson(yourJson, Data.class); 

我没有,但你应该检查是否有下一个在阅读阅读器时预期的类型,以防止崩溃。

public class All_Plan { 

    @SerializedName("Coin") 
    private ArrayList<CoinData> data; 

    @SerializedName("status") 
    private String status; 

    public ArrayList<CoinData> getData() { 
     return data; 
    } 

    public void setData(ArrayList<CoinData> data) { 
     this.data = data; 
    } 

    public String getStatus() { 
     return status; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 
} 
+0

这将如何解决获取数组中的所有对象的问题? – DennisN