【发布时间】:2022-01-22 14:19:27
【问题描述】:
大家好, 我正在尝试解决来自:https://api.binance.com/api/v3/klines?symbol=BTCUSDT&interval=1d&limit=2
的 api 响应响应包含 Pojo24 类的二维数组(见下文) 我想将 api 的响应获取到 Pojo24.class 中(包括 getter 和 setter)。所以最后我想把它放到一个数据库中。 我尝试使用 Gson.class,不幸的是它没有成功。有没有人可以带我一起解决?提前Tnx!
public class Pojo24{
private Long id;
private Long openTime;
private String open;
private String high;
private String low;
private String close;
private String volume;
private Long closeTime;
private String quoteAssesVolume;
private Long numberOfTrades;
private String tbbav; //taker buy base asset volume
private String tbqav; //taker buy quote asset volume
private String ignore;
}
package com.example.Binance24hr;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Binance24hrApplication {
public static void main(String[] args) {
SpringApplication.run(Binance24hrApplication.class, args);
String url = "https://api.binance.com/api/v3/klines?symbol=BTCUSDT&interval=1d&limit=2";
Gson gson = new Gson();
List<Object[]> result = gson.fromJson(url, new TypeToken<ArrayList<Object[]>>(){}.getType());
List<Pojo24> pojo24List = result.stream()
.map(e -> {
Pojo24 pojo24 = new Pojo24();
// pojo24.setId(new Double((Double) e[0]).longValue());
pojo24.setOpenTime(new Double((String) e[1]).longValue());
pojo24.setOpen((String) e[2]);
pojo24.setHigh((String) e[3]);
pojo24.setLow((String) e[4]);
pojo24.setClose((String) e[5]);
pojo24.setVolume(String.valueOf(e[6]));
pojo24.setCloseTime(new Double((String) e[7]).longValue());
pojo24.setQuoteAssesVolume(String.valueOf(e[8]));
pojo24.setNumberOfTrades(new Double((String) e[9]).longValue());
pojo24.setTbbav((String) e[10]);
pojo24.setTbqav((String) e[11]);
// pojo24.setIgnore((String) e[12])
return pojo24;
})
.collect(Collectors.toList());
}
}
当我运行这个时,我得到了以下异常:
2022-01-27 19:33:15.661 信息 10168 --- [主要] c.e.Binance24hr.Binance24hrApplication : 已启动 Binance24hrApplication in 7.669 seconds (JVM running for 9.848) 线程“主”com.google.gson.JsonSyntaxException 中的异常: java.lang.IllegalStateException:应为 BEGIN_ARRAY 但为 STRING 在第 1 行第 1 列路径 $ 在 com.google.gson.Gson.fromJson(Gson.java:939) 在 com.google.gson.Gson.fromJson(Gson.java:892) 在 com.google.gson.Gson.fromJson(Gson.java:841) 在 com.example.Binance24hr.Binance24hrApplication.main(Binance24hrApplication.java:20) 引起:java.lang.IllegalStateException:预期 BEGIN_ARRAY 但 在第 1 行第 1 列路径 $ 处为 STRING com.google.gson.stream.JsonReader.beginArray(JsonReader.java:350) 在 com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:80) 在 com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61) 在 com.google.gson.Gson.fromJson(Gson.java:927) ... 3 更多
【问题讨论】:
-
您好,我访问了您发布的 URL,在嵌套的 JSON 数组中只能找到 12 个元素,但您的
Pojo24类中有 13 个字段。