2013-04-10 235 views
0

晚上好,解析JSON使用GSON

我期待通過YQL請求轉換成一個列表來解析JSON塊,我從yahoo.finance.quote到一個SQL數據庫可以使用來自URL陣列。

這裏是代碼相關的功能塊:

String uri = "(\"GOOG\",\"YHOO\",\"AAPL\",\"C\",\"FB\",\"GE\",\"BAC\")"; 

String yql = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quote%20where%20symbol%20in%20" + uri + "&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys"; 


     BufferedReader reader = null; 
      URL url = new URL(yql); 
      reader = new BufferedReader(new InputStreamReader(url.openStream())); 

      Class1 data = gson.fromJson(reader, Class1.class); 
      System.out.println(new Gson().toJson(data)); 

public class Class1 { 
     private int query; 
     private int results; 
     private List<Class2> quote; 
    } 

    public class Class2 { 
     private String Name; 
    } 

從JSON的實際數據我想是Data.Query.Result.Quote,但我似乎不能引用這個正確使用內部類(1類,等級2)。任何人都可以提供一些幫助,或者讓我知道我是否在做一些愚蠢的事情?謝謝。

回答

0

Query,resultsquote分別是JSONObject。你不能以這種方式映射它們,並期望它能夠工作。使用此結構作爲參考,並完成其餘部分。

解析

Response fromJson = gson.fromJson(file, Response.class); 
System.out.println(fromJson.getQuery().getResults().getQuote().getSymbol()); 

輸出

GOOG

結構

public class Response 
{ 
    private Query query; 

    public Query getQuery() 
    { 
     return query; 
    } 

    public void setQuery(Query query) 
    { 
     this.query = query; 
    } 

} 

class Query 
{ 
    private int count; 
    private Results results; 
    public int getCount() 
    { 
     return count; 
    } 
    public void setCount(int count) 
    { 
     this.count = count; 
    } 
    public Results getResults() 
    { 
     return results; 
    } 
    public void setResults(Results results) 
    { 
     this.results = results; 
    } 


} 

class Results 
{ 
    private Quote quote; 

    public Quote getQuote() 
    { 
     return quote; 
    } 

    public void setQuote(Quote quote) 
    { 
     this.quote = quote; 
    } 


} 

class Quote 
{ 
    private String symbol; 

    public String getSymbol() 
    { 
     return symbol; 
    } 

    public void setSymbol(String symbol) 
    { 
     this.symbol = symbol; 
    } 
} 
+0

感謝你的幫助,我得到從打印空指針錯誤行,我可以在一個閱讀BufferedReader就像我在我的原始代碼中,或者它需要成爲一個文件,就像你指定的那樣。 – BTC 2013-04-11 01:57:16

+0

@JCG它可以是一個'BufferedReader',但你需要處理元素丟失的情況(它們可以是null)。 – 2013-04-11 05:41:36

+0

非常感謝 – BTC 2013-04-12 05:51:15