Я занимаюсь написанием Java API для доступа к API Cryptsy. При попытке десериализовать конкретный вызов api у меня возникает проблема с NullPointerException.NullPointer с использованием GSON, реализующего Cryptsy API
Проблема линия происходит в классе адаптера:
JsonObject orderbookObj = json.getAsJsonObject().getAsJsonObject("return");
API вызовы: http://pubapi.cryptsy.com/api.php?method=orderdata
Вывод в формате JSON:
{
"success":1,
"return":
{
"ASC":
{
"marketid":"111",
"label":"ASC\/LTC",
"primaryname":"AsicCoin",
"primarycode":"ASC",
"secondaryname":"LiteCoin",
"secondarycode":"LTC",
"sellorders":
[
{
"price":"0.00004197",
"quantity":"1536.00000000",
"total":"0.06446592"
},...
],
"buyorders":
[
{
"price":"0.00003957",
"quantity":"7147.96283059",
"total":"0.28284489"
},...
]
},
"CENT":
{
....
Базовый класс для всех сериализованных объектов
public class Result {
private int success;
private String error;
public Result() {
error = "";
}
// Getters and Setters
}
Этот класс содержит информацию о покупке/продаже по специальной цене.
public class GeneralOrder {
private double price;
private double quantity;
private double total;
public GeneralOrder(){}
// Getters and Setters
}
Это класс, который будет хранить всю информацию, связанную с «ASC» или «CENT»
public class GeneralOrderbook {
private int marketid ;
private String label ;
private String primarycode ;
private String primaryname ;
private String secondarycode ;
private String secondaryname ;
@SerializedName("sellorders")
private GeneralOrder[] sellorders;
@SerializedName("buyorders")
private GeneralOrder[] buyorders;
public GeneralOrderbook(){}
// Getters and Setters
}
Они рядом классов используются во время десериализации
public class GeneralMarketData{
private GeneralMarket[] markets;
public GeneralMarketData(){}
// Getters and Setters
}
public class GeneralOrderbookReturn extends Result{
@SerializedName("return")
private GeneralOrderbookData data;
public GeneralOrderbookReturn(){}
// Getters and Setters
}
класса который обеспечивает индивидуальную десериализацию
public class GeneralOrderbookAdapter implements JsonDeserializer<GeneralOrderbookData> {
public GeneralOrderbookData deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
GeneralOrderbookData god = new GeneralOrderbookData();
JsonObject orderbookObj = json.getAsJsonObject().getAsJsonObject("return");
List<GeneralOrderbook> orderbooks = new ArrayList<GeneralOrderbook>();
Iterator<Entry<String, JsonElement>> itr = orderbookObj.entrySet().iterator();
while(itr.hasNext())
{
GeneralOrderbook orderbook = context.deserialize(itr.next().getValue(), GeneralOrderbook.class);
orderbooks.add(orderbook);
}
god.setOrderbook(orderbooks.toArray(new GeneralOrderbook[0]));
return god;
}
}
Да, «ASC» и «CENT» являются символами строкового тикера. –
Спасибо, я смог заставить его работать правильно с вами. –