2012-02-19 40 views
0

我有一個JSON字符串是這樣的:如何從JSON字符串中獲取數據?

{ 
    "response":[2, 
     { 
      "id":"187", 
      "name":"John", 
      "surname":"Corner" 
     }, 
     { 
      "id":"254", 
      "name":"Bob", 
      "surname":"Marley" 
     } 
    ] 
} 

如何在Java中使用GSON LIB我分析它? 我想:

static class SearchRequest { 
    private Names[] response; 

    static class Names { 
     private int id; 
     private String name; 
     private String surname; 
    } 
} 

,但它不工作:(

+0

你看到的例外是由於您的JSON字符串,我修改了它和程序工作正常。看看我的答案。 – Juvanis 2012-02-23 06:50:41

回答

2

response陣列不僅包含Names,它還包含一個整數值。response[0]=2 所以你必須使用類似

private Object[] response; 

地址: 我想,你沒有必要改變你的JSON,因爲你的response是私有的,所以你應該使用的getter:

static class SearchRequest { 
    private Object[] response; 

    static class Names { 
     private int id; 
     private String name; 
     private String surname; 
    } 

    public List<Names> getNames() { 
     List list = new ArrayList(); 
     list.addAll(Arrays.asList(response)); 
     return (List<Names>) list.subList(1, response.length); 
    } 

    public int getAmount() { 
     return (Integer) response[0]; 
    } 

    public void setNames(List<Names> names) { 
     response = new Object[names.size() + 1]; 
     response[0] = names.size(); 
     for (int i = 0, namesSize = names.size(); i < namesSize; i++) { 
      response[i + 1] = names.get(i); 
     } 
    } 
} 
+0

噢,天啊!是啊!非常感謝你。你是對的,但Object []的響應不是一個簡單的解決方案...我將嘗試編輯JSON字符串並解析它,而不使用整數元素。 – ruslanys 2012-02-19 08:35:08

+0

@ user1203901請參閱我的更新。 – kornero 2012-02-19 10:16:28

+0

非常感謝。我理解你。在getNames方法中,您將Object的類型從1更改爲Array到Names的結尾。 – ruslanys 2012-02-19 10:40:46

1

我準備了一個示例代碼來測試你的情況下,使用gson-2.1.jar作爲庫並正確運行。我通過從響應數組開始刪除"2,"來修改您的JSON字符串,因爲它會導致異常。看看和測試該代碼:

import com.google.gson.Gson; 

public class Test 
{ 
    static class SearchRequest 
    { 
     private Names [] response; 

     static class Names 
     { 
      private int id; 
      private String name; 
      private String surname; 
     } 
    } 

    public static void main (String [] args) 
    { 
     Gson gson = new Gson(); 
     String str = "{ \"response\":" 
        + "[{\"id\":\"187\",\"name\":\"John\",\"surname\":\"Corner\"}," 
        + "{\"id\":\"254\",\"name\":\"Bob\",\"surname\":\"Marley\"}]}"; 

     SearchRequest request = new SearchRequest(); 
     request = gson.fromJson(str, SearchRequest.class); 
     System.out.println("name of 1st: " + request.response [ 0 ].name); 
     System.out.println("surname of 2nd: " + request.response [ 1 ].surname); 
    } 
} 

輸出:

name of 1st: John 
surname of 2nd: Marley 
+0

是的,謝謝,我也一樣^ _ ^。這很容易然後使用對象[] :) – ruslanys 2012-02-19 09:40:45

+0

@ruslanys所以投票了我的答案和剔接受=) – Juvanis 2012-02-23 06:39:10