代码之家  ›  专栏  ›  技术社区  ›  BTC

使用GSON将JSON从URL解析为数组

  •  0
  • BTC  · 技术社区  · 12 年前

    晚上好

    我想将通过YQL请求从yahoo.finance.requote获得的JSON块解析为一个列表,以便与SQL DB一起使用。

    以下是相关的代码块:

    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,但我似乎无法使用内部类(Class1,Class2)正确引用它。有人能提供一些帮助吗?或者如果我在做一些愚蠢的事情,请告诉我?非常感谢。

    1 回复  |  直到 12 年前
        1
  •  0
  •   Deepak Bala    12 年前

    Query , results quote JSONObject 这是他们自己的权利。你不能以这种方式绘制它们并期望它能起作用。使用此结构作为参考,并完成其余部分。

    作语法分析

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

    输出

    谷歌

    结构

    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;
        }
    }