从嵌套的json中提取内容

时间:2014-11-30 09:00:26

标签: json gson

我正在尝试使用gson库来解析json文件。我想获取JSON中所有状态的名称和URL列表。我无法理解json对象的结构以及如何检索这个数据,因为我创建的任何结构都返回空值。 JSON的示例结构是

{
  "states" : {
    "state53" : {
      "name" : "state53",
      "url" : "http://cv4a.org/veterans-group-calls-accountability-va-funds-boost/",
      "candidateElements" : [ {
        "top" : 202,
        "left" : 58,
        "xpath" : "/HTML[1]/BODY[1]/DIV[2]/DIV[1]/DIV[2]/DIV[1]/ARTICLE[1]/HEADER[1]/P[1]/A[1]",
        "width" : 135,
        "height" : 20
      }, {
        "top" : 1307,
        "left" : 225,
        "xpath" : "/HTML[1]/BODY[1]/DIV[2]/DIV[1]/DIV[2]/DIV[1]/OL[1]/LI[1]/ARTICLE[1]/HEADER[1]/TIME[1]/A[1]",
        "width" : 191,
        "height" : 22
      }, {
        "top" : 1374,
        "left" : 912,
        "xpath" : "/HTML[1]/BODY[1]/DIV[2]/DIV[1]/DIV[2]/DIV[1]/OL[1]/LI[1]/ARTICLE[1]/A[1]",
        "width" : 78,
        "height" : 38
      }, {
        "top" : 0,
        "left" : 0,
        "xpath" : "/HTML[1]/BODY[1]/DIV[2]/DIV[1]/DIV[2]/DIV[1]/SECTION[1]/DIV[1]/P[1]/A[1]",
        "width" : 169,
        "height" : 18
      } ],
      "fanIn" : 1,
      "fanOut" : 3,
      "id" : 53,
      "failedEvents" : [ "xpath /HTML[1]/BODY[1]/DIV[2]/DIV[1]/DIV[2]/DIV[1]/SECTION[1]/DIV[1]/P[1]/A[1]" ]
    },
    "state9" : {
      "name" : "state9",
      "url" : "http://cv4a.org/blog/#",
      "candidateElements" : [ ],
      "fanIn" : 1,
      "fanOut" : 0,
      "id" : 9,
      "failedEvents" : [ ]
    },

1 个答案:

答案 0 :(得分:1)

public static void main(String[] args) {
  JsonElement jsonElement = new JsonParser().parse(jsonString);
  JsonObject statesObj = jsonElement.getAsJsonObject();
  statesObj = statesObj.getAsJsonObject("states");

  final Set<Map.Entry<String, JsonElement>> statesEntries = statesObj.entrySet();
  for (Map.Entry<String, JsonElement> state : statesEntries) {
    JsonObject stateObj = state.getValue().getAsJsonObject();
    String name = stateObj.get("name").getAsString();
    //....
  }
}

或者您可以使用字段(name,url,e.t.c)创建类(如State,CandidateElement)并使用自动序列化/反序列化。见documentation