2016-10-18 90 views
0

我試圖提取key中的第一個元素和下面的json數據中的值。然而,我見過的大多數例子都使用org.json,它似乎已經過時了?用下面的json文件做這件事最好的方法是什麼?在不使用org.json的情況下解析java中的json文件

"data": [ 
    { 
     "key": [ 
     "01", 
     "2015" 
     ], 
     "values": [ 
     "2231439" 
     ] 
    }, 
    { 
     "key": [ 
     "03", 
     "2015" 
     ], 
     "values": [ 
     "354164" 
     ] 
    }, 
    { 
     "key": [ 
     "04", 
     "2015" 
     ], 
     "values": [ 
     "283712" 
     ] 
    } 
    ] 
} 

這是我如何得到json響應並將其存儲在一個字符串中,該字符串從上面提供了json數據。

HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection(); 
      httpConnection.setRequestMethod("POST"); 
      httpConnection.setDoOutput(true); 
      OutputStream os = httpConnection.getOutputStream(); 
      os.write(jsonText.getBytes()); 
      os.flush(); 
      os.close(); 

      int responseCode = httpConnection.getResponseCode(); 
      System.out.println(responseCode); 

      if (responseCode == HttpURLConnection.HTTP_OK) { 
       BufferedReader br = new BufferedReader(new InputStreamReader(httpConnection.getInputStream())); 
       String input; 
       StringBuffer response = new StringBuffer(); 

       while ((input = br.readLine()) != null) { 
        response.append(input); 
       } 
       br.close(); 
       String responseJson = response.toString(); 
+0

笏你的意思是過時的? – Nyakiba

+0

@Nyakiba 它的正確性,org.json可能不是最好的。還有其他幾個JSON Apis,像Gson,Jackson,Genson和FlexJson一樣被推薦使用。 結帳在此鏈接的評論部分的討論http://stackoverflow.com/a/18998203/3838328 – Kamal

+0

似乎我一直在黑暗中 – Nyakiba

回答

0

那麼我嘗試了下面的使用傑克遜API。基本上,我創建了一個類,它是整個JSON數據

public class MyData { 

    private List<Map<String, List<String>>> data; 

    public List<Map<String, List<String>>> getData() { 
     return data; 
    } 

    public void setData(List<Map<String, List<String>>> data) { 
     this.data = data; 
    } 

} 

寫了下面的解析器利用傑克遜API的Java表示,但是在你所描述的JSON提到「鑰匙」 ,將具有值列表作爲字符串。

對於e.g都和2015年將在列表爲「鑰匙」項目。

請注意,我已將您的JSON數據轉儲到文件中,並從中讀取JSON。

public static void main(String[] args) { 

    ObjectMapper mapper = new ObjectMapper(); 
    try { 

     MyData myData = mapper.readValue(new File("data"), MyData.class); 

     for (Map<String, List<String>> map : myData.getData()) { 

      // To retrieve the first element from the list // 
      // map.get("key") would return a list 
      // in order to retrieve the first element 
      // wrote the below 

      System.out.println(map.get("key").get(0)); 
     } 

    } catch (JsonGenerationException e) { 
     e.printStackTrace(); 
    } catch (JsonMappingException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

注:如您在字符串中檢索的JSON,請使用下面的代碼

MyData myData = mapper.readValue(responseJson, MyData.class); 
相關問題