2013-12-17 137 views
3

如何從下面的JSON如果JSON數據是字符串閱讀JSON在Java

{ 
    "name": "test", 
    "values": [ 
     { 
      "valu": "23", 
      "valu1": "24", 
      "valu2": "25" 
     } 
    ] 
} 
+0

這個問題已經得到了如此頻繁的回答,所以當SO向你提出「相關」問題時,你需要採取另一種方式。 – ins0m

回答

1

你需要像Jackson一些庫做解析您在讀取數據。另見Jackson tutorial。我認爲你最容易從tree model開始。

+0

任何人都可以幫助我消費和生產一個JSON使用寧靜的web服務 – 1209

+0

@amrutha:找到[Spring + JSON教程](http://www.mkyong.com/spring-mvc/spring-3-mvc-and- JSON-示例/)? – wilx

+0

如果沒有Spring,我需要一個消耗和生成JSON的示例 – 1209

2

使用GsonGson#fromJson方法

一個

fromJson(String, Class)

YourType o = new Gson().fromJson("your json string", YourType.class); 

fromJson(Reader, Class)

YourType o = new Gson().fromJson(new StringReader("your json string"), 
    YourType.class); 

簡單的例子:

定義類(或多個)要映射的JSON數據於:

static class Hobby { 
    Hobby(String n) { name = n; } 
    String name; 
    @Override 
    public String toString() { 
     return "Hobby [name=" + name + "]"; 
    } 
} 

static class Person { 
    String firstName, lastName; 
    int age; 
    List<Hobby> hobbies = new ArrayList<Hobby>(); 
    @Override 
    public String toString() { 
     return "Person [firstName=" + firstName + ", lastName=" + lastName 
       + ", age=" + age + ", hobbies=" + hobbies + "]"; 
    } 
} 

現在測試用下面的JSON字符串

@Test 
public void fromJson() { 
    Person o = new Gson().fromJson(
      "{\r\n" + 
      " \"firstName\":\"John\",\r\n" + 
      " \"lastName\":\"Doe\",\r\n" + 
      " \"age\":24,\r\n" + 
      " \"hobbies\":[\r\n" + 
      "  {\r\n" + 
      "   \"name\":\"Programming\"\r\n" + 
      "  },\r\n" + 
      "  {\r\n" + 
      "   \"name\":\"Sports\"\r\n" + 
      "  }\r\n" + 
      " ]\r\n" + 
      "}", 
      Person.class); 
    System.out.println(o.toString()); 
} 

此打印:

Person [firstName=John, lastName=Doe, age=24, hobbies=[Hobby [name=Programming], Hobby [name=Sports]]] 

看到類Gson的其他辦法的Javadoc。也看看他們的user-guide

+0

wt是YourType here – 1209

+0

@amrutha它是您想要將json String轉換爲的類型,您必須創建一個類。請參閱我已鏈接的用戶指南。 – A4L

+0

@amrutha,我已經添加了一個小例子,請參閱我的編輯。 – A4L

1
try { 

      String data = null; 
      String url = "localhost:8080/test/rest/Action/xyz"; 
      String[] dataArray = null; 
      DefaultHttpClient client = new DefaultHttpClient(); 
      HttpUriRequest getRequest = new HttpGet(getUrl); 
      getRequest.addHeader("User-Agent", USER_AGENT); 
      getRequest.addHeader(BasicScheme.authenticate(new UsernamePasswordCredentials("key", 
       "pwd"), "UTF-8", false)); 
      getRequest.setHeader("Content-Type", "application/json"); 
      HttpResponse response = client.execute(getRequest); 

      HttpResponse response = client.execute(request); 

      BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
      System.out.println("Response Code : " + response.getStatusLine().getStatusCode()); 
      data = rd.readLine(); 

      } 

     } catch() { 
     } 

try { 

     HttpGet request = new HttpGet(url); 
     HttpResponse response = client.execute(request); 
     System.out.println("Response Code : " + response.getStatusLine().getStatusCode()); 

     data = EntityUtils.toString(response.getEntity()); 
     dataArray = data.split(","); 
    } 
    catch (Exception ex) { 
    } 
    JSONObject mJSONObject = new JSONObject(data); 

    try { 
     JSONArray mjSONArray = mJSONObject.getJSONArray("values"); 
     for (int i = 0; i < mjSONArray.length(); i++) { 
      JSONObject obj; 
      obj = mjSONArray.getJSONObject(i); 
      valu = obj.getString("valu"); 
      valu1= obj.getString("valu1"); 
      valu2= obj.getString("valu2"); 
      system.out.println(valu);    
      system.out.println(valu1);    
      system.out.println(valu2); 
     } 

使用這個,你可以得到變量中的所有jsonarray數據。

+0

如果上面的json是來自url我可以讀取它而不保存到字符串 – 1209

+0

爲什麼?不工作? –

+0

public class olaptemplate {public static void main(String [] args){ 嘗試URL url = new URL(「http:// localhost:8080/test/rest/Action/xyz」); httpURLConnection conn =(HttpURLConnection)url.openConnection(); conn.setRequestMethod(「GET」); conn.setRequestProperty(「Accept」,「application/json」); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()))); 字符串輸出; StringBuilder sb = new StringBuilder(); ((output = br.readLine())!= null){sb.append(輸出) } catch(){}}} – 1209

0

有很多JSON解析器。 我發現json-simple容易實現。 一組decoding-examples顯示如何從字符串中創建JSON對象

這是從String中讀取JSON對象的代碼片段。 (直接從解碼例子頁面鏈接上面把這個片斷。)

System.out.println("=======decode======="); 

    String s="[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]"; 
    Object obj=JSONValue.parse(s); 
    JSONArray array=(JSONArray)obj; 
    System.out.println("======the 2nd element of array======"); 
    System.out.println(array.get(1)); 
    System.out.println(); 

    JSONObject obj2=(JSONObject)array.get(1); 
    System.out.println("======field \"1\"=========="); 
    System.out.println(obj2.get("1"));  


    s="{}"; 
    obj=JSONValue.parse(s); 
    System.out.println(obj); 

    s="[5,]"; 
    obj=JSONValue.parse(s); 
    System.out.println(obj); 

    s="[5,,2]"; 
    obj=JSONValue.parse(s); 
    System.out.println(obj); 

的JSONObject是一個java.util.Map和JSONArray是一個java.util.List,這樣你就可以用地圖的標準操作訪問它們或列表