2014-02-20 42 views
0

我知道如何解析json並從java中獲得json數組的結果,但是我有一個json,我無法找出哪個是數組,以及如何實現我解析它,在這個json中,我想'state'和'base_url'。可以有人幫助我,我該如何做到這一點。無法解析並從json獲取數組結果

{ 
    "tree": [{ 
     "data": { 
      "title": "/clusterstate.json", 
      "attr": { 
       "href": "zookeeper?detail=true&path=%2Fclusterstate.json" 
      } 
     } 
    }], 
    "znode": { 
     "data": "{\n \"cmn2\":{\n \"shards\":{\n  \"shard1\":{\n  \"range\":\"80000000-ffffffff\",\n  \"state\":\"active\",\n  \"replicas\":{\n   \"core_node1\":{\n   \"state\":\"active\",\n   \"base_url\":\"myurlforjson\",\n   \"core\":\"cmn2_shard1_replica1\",\n   \"node_name\":\"myurlforjson:8080_solr\"},\n   \"core_node3\":{\n   \"state\":\"active\",\n   \"base_url\":\"myurlforjson\",\n   \"core\":\"cmn2_shard1_replica1\",\n   \"node_name\":\"myurlforjson:8080_solr\",\n   \"leader\":\"true\"}}},\n  \"shard2\":{\n  \"range\":\"0-7fffffff\",\n  \"state\":\"active\",\n  \"replicas\":{\n   \"core_node2\":{\n   \"state\":\"active\",\n   \"base_url\":\"mydomainmyurlforjson:8080/solr\",\n   \"core\":\"cmn2_shard2_replica1\",\n   \"node_name\":\"myurlforjson:8080_solr\"},\n   \"core_node4\":{\n   \"state\":\"active\",\n   \"base_url\":\"myurlforjson\",\n   \"core\":\"cmn2_shard2_replica1\",\n   \"node_name\":\"myurlforjson:8080_solr\",\n   \"leader\":\"true\"}}}},\n \"maxShardsPerNode\":\"1\",\n \"router\":{\"name\":\"compositeId\"},\n \"replicationFactor\":\"1\"},\n \"elect\":{\n \"shards\":{\n  \"shard1\":{\n  \"range\":\"80000000-ffffffff\",\n  \"state\":\"active\",\n  \"replicas\":{\n   \"core_node3\":{\n   \"state\":\"active\",\n   \"base_url\":\"myurlforjson\",\n   \"core\":\"elect_shard1_replica1\",\n   \"node_name\":\"myurlforjson:8080_solr\",\n   \"leader\":\"true\"},\n         \"core_node5\":{\n   \"state\":\"active\",\n   \"base_url\":\"mydomainmyurlforjson:8080/solr\",\n   \"core\":\"elect_shard1_replica1\",\n   \"node_name\":\"myurlforjson:8080_solr\"}}},\n  \"shard2\":{\n  \"range\":\"0-7fffffff\",\n  \"state\":\"active\",\n  \"replicas\":{\n   \"core_node4\":{\n   \"state\":\"active\",\n   \"base_url\":\"myurlforjson\",\n   \"core\":\"elect_shard2_replica1\",\n   \"node_name\":\"myurlforjson:8080_solr\"},\n   \"core_node6\":{\n \"state\":\"active\",\n   \"base_url\":\"myurlforjson\",\n   \"core\":\"elect_shard2_replica1\",\n   \"node_name\":\"myurlforjson:8080_solr\",\n   \"leader\":\"true\"}}}},\n \"maxShardsPerNode\":\"1\",\n \"router\":{\"name\":\"compositeId\"},\n \"replicationFactor\":\"1\"}}", 
     "prop": { 
      "pzxid": 4294967540, 
      "czxid": 4294967540, 
      "mzxid": 12884915656, 
      "mtime": "Thu Feb 20 09:00:48 UTC 2014 (1392886848018)", 
      "ephemeralOwner": 0, 
      "children_count": 0, 
      "cversion": 0, 
      "ctime": "Thu Dec 05 10:19:10 UTC 2013 (1386238750279)", 
      "aversion": 0, 
      "dataLength": 2388, 
      "version": 1119 
     }, 
     "path": "/clusterstate.json" 
    } 
} 

這是我的代碼,讓我知道我在哪裏解析

URL url = new URL("http://myipaddress:8080/solr/zookeeper? detail=true&path=%2Fclusterstate.json"); 

    System.out.println(url); 

    java.net.URLConnection connection = url.openConnection(); 
    //String ref = "http://ajax.googleapis.com"; 
    //connection.addRequestProperty("Referer", ref); 

    String line; 
    StringBuilder builder = new StringBuilder(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(
      connection.getInputStream())); 
    while ((line = reader.readLine()) != null) { 
     builder.append(line); 
    } 

    JSONObject json = new JSONObject(builder.toString()); 


    //System.out.println(json); 
    JSONArray entries = json.getJSONArray("tree"); 
    for (int i = 0; i < entries.length(); i++) { 
     JSONObject row = entries.getJSONObject(i); 

     bean test = new bean(); 
     test.setRss(row.getString("data")); 
     System.out.println(row.getString("data")); 

    } 
    } 
    catch (Exception e) { 
     // TODO: handle exception 
    } 

    return "cloud"; 
} 
+0

你試過用** json.parse(jsonresponse)**; –

+0

不,我會盡力讓你知道,謝謝你的快速回復 – user3291784

+0

爲什麼指針/ znode/data中的值是序列化的JSON對象而不是對象本身? – fge

回答

0
JSONObject znode = json.getJSONObject("znode"); 
String data = znode.getJSONObject("data"); 
JSONObject dataJson = new JSONObject(data); 

從那裏,你對你自己 - 它看起來像cmn2 - >碎片-shard1 - >狀態等,但是閱讀這種形式的JSON有點困難。我建議記錄dataJson,以便更清楚地看到它。