【问题标题】:Parse JSON to Array from URL using GSON使用 GSON 从 URL 解析 JSON 到数组
【发布时间】:2023-03-15 06:13:01
【问题描述】:

晚上好,

我希望将通过 YQL 请求从 yahoo.finance.quote 获得的 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)正确引用它。谁能提供一些帮助,或者让我知道我是否在做一些愚蠢的事情?谢谢。

【问题讨论】:

    标签: java json yql


    【解决方案1】:

    Queryresultsquote 本身就是 JSONObjects。您不能以这种方式映射它们并期望它能够工作。使用此结构作为参考并完成其余部分。

    解析

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

    【讨论】:

    • 感谢您的帮助,我从打印行收到空指针错误,我可以像在原始代码中那样在 BufferedReader 中读取,还是需要它是一个文件,正如你指定的那样。
    • @JCG 可以是BufferedReader,但您需要处理缺少元素的情况(可以是null)。
    猜你喜欢
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多