JSON反序列化brakets {}中的一系列对象

时间:2017-10-24 21:44:40

标签: java json

我正在为Alpha Vantage编写Java Library Parser。以下是下载某些数据的端点:

https://www.alphavantage.co/query?function=DIGITAL_CURRENCY_INTRADAY&symbol=BTC&market=CNY&apikey=demo

如您所见,历史数据包含在{}中而不包含在[]中。你有什么想要反序列化这个吗?我正在使用Gson,但我找不到任何方式

1 个答案:

答案 0 :(得分:0)

首先,您的JSON结构可能不是您想要的。 “时间序列(数字货币日内)”的内容是具有似乎代表日期的属性的对象。这从一开始就很烦人,因为它们是动态生成的。如果内容是对象列表(也可能包含日期值),那将非常简单:

{
    "Time Series (Digital Currency Intraday)": [
        {
            "date": "2017-10-24 22:30:00",
            "1a. price (CNY)": "34889.57919003",
            "1b. price (USD)": "5259.23870358",
            "2. volume": "5708.68994668",
            "3. market cap (USD)": "30023363.11434300"
        }
    ]
}

这将是一个更好的结构,imo。然后,您需要做的就是将属性名称更改为更友好的Java并创建一些POJO,然后您可以轻松地使用GSON反序列化。请参阅:http://www.baeldung.com/gson-deserialization-guide

对于具有当前结构的解决方案,您可以使用JSONObject的entitySet()方法。

它返回一个Set>宾语。假设您将在表示根Json对象的对象上使用该方法,那么您将在Map对象中获得的String值将是“Meta Data”和“Time Series(Digital Currency Intraday)”。这些是JSON中根对象的属性。与它们关联的JsonElement将是属性的值,在本例中是另一个JSON对象。

因此,您可以使用它以及您对JSON结构的了解,将数据反序列化为类的某些对象。当然还有几个循环。