2

JSON数据

{
  "id": 8428514522228612,
  "name": "Order Acknowledgment",
  "columns": [
    {
      "id": 7701511984703364,
      "index": 0,
      "title": "Order#",
      "type": "TEXT_NUMBER",
      "primary": true
    }, {
      "id": 2072012450490244,
      "index": 1,
      "title": "Order Date",
      "type": "DATE"
    }
  ]
}

创建 java 对象并能够获取 ID 值

MyJsonObject1 obj = gson.fromJson(line, MyJsonObject1.class);
System.out.println(obj.getId());

由于列是一个对象数组,我需要遍历它并获取列键和对值。我只需要获取列 id,所以我正在尝试下面的代码

    SingleMap nextActionInfoMap = new Gson().fromJson((String) col,SingleMap.class);
int column_id = nextActionInfoMap.getId();
System.out.println(column_id);


class MyJsonObject1 {

private String id;
private String name;
private Object[] columns;

public Object[] getColumns() {
    return columns;
}

public void setColumns(JSONObject[] columns) {
    this.columns = columns;
}

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

public void setName(String name) {
    this.name = name;
}

public String getId() {
    return id;
}

public String getName() {
    return name;
}

}

public class SingleMap {

private int id;
private int index;
private String title;
private String type;
private String primary;

public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public int getIndex() {
    return index;
}
public void setIndex(int index) {
    this.index = index;
}
public String getTitle() {
    return title;
}
public void setTitle(String title) {
    this.title = title;
}
public String getType() {
    return type;
}
public void setType(String type) {
    this.type = type;
}
public String getPrimary() {
    return primary;
}
public void setPrimary(String primary) {
    this.primary = primary;
}

}

但我得到:

java.lang.ClassCastException: com.google.gson.internal.LinkedHashTreeMap cannot be cast to java.lang.String

我该如何解决这个问题?

4

1 回答 1

3

如果您将columns属性更改MyJsonObject1为类型SingleMap[]List<SingleMap>代替,Object[]那么 Gson 应该一次性为您完成所有解析,而无需进行第二次传递来显式解析每一列。

class MyJsonObject1 {

  private SingleMap[] columns;

  public SingleMap[] getColumns() {
    return columns;
  }

  public void setColumns(SingleMap[] columns) {
    this.columns = columns;
  }
//...
}
于 2013-05-08T14:36:43.503 回答