2012-10-22 76 views
0

我需要從JSON數組中取值並顯示它們。以下是我用過的代碼。如何將json數組的值轉換爲java字符串

getresponse類將向PHP頁面發送HTTP請求並獲取相關的JSON數組,並且公共變量res將容納返回的JSON數組。

public class JSONConverter { 
    public void convert(){ 
     getresponse gr=new getresponse(); 
     String json = gr.res; 
     Data data = new Gson().fromJson(json, Data.class); 
     System.out.println(data); 
    } 
} 

class Data { 
    private String city; 
    private int reserve_no; 

    public String getCity() { return city; } 
    public int getReserve_no() { return reserve_no; } 

    public void setTitle(String city) { this.city = city; } 
    public void setId(int reserve_no) { this.reserve_no = reserve_no; } 

    public String toString() { 
     return String.format(city); 
    } 
} 

getrespose類

public class getresponse { 
public static String res; 
    public void counter() { 
try { 
    URL url = new URL("http://taxi.net/fetchLatest.php"); 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    conn.setRequestMethod("GET"); 
    conn.setRequestProperty("Accept", "application/json"); 

    if (conn.getResponseCode() != 200) { 
     throw new RuntimeException("Failed : HTTP error code : " 
       + conn.getResponseCode()); 
    } 

    BufferedReader br = new BufferedReader(new InputStreamReader(
     (conn.getInputStream()))); 
      String str; 
    while ((str =br.readLine()) != null) {         
        res=str; 

    } 

    conn.disconnect(); 

下面是返回的JSON陣列的例子。

[{「reserve_no」:「20」,「city」:「city2」,「street」:「street1234」,「discription」:「discription123」,「date」:「2012-10-22 04:47:54「,」customer「:」abc「}]

此代碼不顯示返回的JSON數組的城市名稱。有人可以通過糾正代碼來幫助我,或者建議更好或更簡單的方法嗎? :)

+0

你的Data類和返回的JSON之間絕對沒有關係,所以GSON如何知道它應該做什麼?您應該創建一個更合適的Data類,並使用與JSON字符串中的字段名稱相匹配的字段。 – fvu

+0

是的,我做了這些改變!標題作爲城市和id作爲reserve_no但我仍然沒有得到相應的城市名稱 – senrulz

+0

所以你說發佈的代碼示例並沒有真正與你實際運行的關係(已經)?這使我們發現問題有點困難,你不這麼認爲嗎?在這種情況下,你應該更新你的代碼示例。 – fvu

回答

2

尼基塔已經給你正確的解決方案,但它在這裏,一步一步。

我您的降低問題這個最小測試:

import com.google.gson.Gson; 

public class TestGSON 
{ 
    public static void main(String[] args) 
    { 
     // that's your JSON sample 
     String json = "[{\"reserve_no\":\"20\",\"city\":\"city2\",\"street\":\"street1234\",\"discription\":\"discription123\",\"date\":\"2012-10-22 04:47:54\",\"customer\":\"abc\"}]"; 
     // note: we tell Gson to expect an **array** of Data 
     Data data[] = new Gson().fromJson(json, Data[].class); 
     System.out.println(data[0]); 
    } 
} 

的問題是,你的JSON片段實際上是對象的陣列,而不僅僅是一個對象(因此[]圍繞它)。所以,你需要告訴GSon它必須期待一個Data數組,而不僅僅是一個Data對象。順便說一句,在執行代碼時爲-已經告訴過你所以這引發的異常:

Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 

當然,除非它得到了一個空catch

吞噬對於數據類:想在重寫toString方法之前,重複兩次,就像你在這裏所做的那樣。我會放棄這種方法,只是做

+0

謝謝你的解釋!它的工作! :) – senrulz

2

Gson根據您的類屬性名稱將json字符串映射到您的類。所以Data類有屬性title這應該被映射到json數組中的city。你需要重命名你的財產city,所以Gson可以找出在哪裏把city從json數組。
或者您可以使用註釋明確地將city映射到title。檢查此:https://sites.google.com/site/gson/gson-user-guide#TOC-JSON-Field-Naming-Support

+0

感謝您的快速回復!即使我改變了他們即使沒有得到收到的響應城市名稱。還有什麼我應該做的代碼? – senrulz

+1

關於更多問題。你有和ARRAY的JSON對象。並且您想將其轉換爲單個對象。你不能。嘗試類似'Data [] datas = new Gson()。fromJson(json,Data []。class);' –

+0

我只想得到幾個特定的​​值。正如在示例中,我只想得到city2和20的值。無論如何,我能做到嗎? – senrulz

相關問題