使用Gson解析不寻常的Json

时间:2017-06-28 14:25:39

标签: java json gson

我使用Java下载一些信息。我收到的JSON格式如下:

  

[[40217657,1498658666000,-0.08537438,2498.9],(...)]

我的问题是我不知道如何构建包装类,因为这个JSON没有关键字。

这是我尝试使用的包装类:

package TaskFormats;

public class TaskBitFinexTrades {
    private double[] info;
    public TaskBitFinexTrades(double[] info) {
        super();
        this.info = info;
    }
    public double[] getInfo() {return info;}
    public void setInfo(double[] info) {this.info = info;}
    @Override
    public String toString() {
        return "[TimeStamp:" + info[1] + ",Id:" + info[0] + ",amount:" + info[2] + ",price:" + info[3] ;
    }

}

以下是我尝试使用Gson的方式

public void loadBitFinexTrades(){
    String url = "https://api.bitfinex.com/v2/trades/tBTCUSD/hist/?limit=1000";
    String json="";
    try{
        json = conecction(url);
        System.out.println(json);
    } catch (Exception e) {e.printStackTrace();}
    if(json!=""){
        Gson gson = new Gson();
        Type type = new TypeToken<List<TaskBitFinexTrades>>() {}.getType();
        List<TaskBitFinexTrades> fromJson = gson.fromJson(json, type);
        for (TaskBitFinexTrades task : fromJson) {
            System.out.println(task);
        }
    }
}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

你拥有的是数组的JSON数组,而不是对象。不要试图从JSON读取对象,而是阅读double[][]并手动重建对象。

下面的代码是临时编写的,为了表明我的观点,还没有尝试过,可能需要一些调整

Gson gson = new Gson();
double[][] infos = gson.fromJson(json, double[][].class);
List<TaskBitFinexTrades> result = Lists.newArrayList(); //see: guava
for (double[] info: infos)
    result.add(new TaskBitFinexTrades(info));
for (TaskBitFinexTrades task : result) {
    System.out.println(task);
}