2014-02-20 2 views
0

json을 구문 분석하고 java의 json 배열에서 결과를 얻는 방법을 알고 있지만 배열이 무엇인지 알 수없는 json이 있습니까? 나는이 json에서 'state'와 'base_url'을 원한다. 어떤 사람이이 일을 어떻게 도와 줄 수 있습니까? 이 cmn2처럼 보인다 - - 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); 

구문 분석 할 위치를 알 수 있도록, 내 코드> 파편 -shard1 -> state, et al. 그러나 그 형태로 JSON을 읽는 것은 약간 어렵습니다. dataJson을 로깅하면 더 명확하게 볼 수 있습니다.

관련 문제