【发布时间】:2017-09-16 10:47:18
【问题描述】:
所以我正在尝试使用 Gson 解析 Java 中的 JSON 对象。 我正在尝试从网站使用 API。 这是代码: https://api.coinmarketcap.com/v1/ticker/bitcoin/
JSON 看起来像这样:
[
{
"id": "bitcoin",
"name": "Bitcoin",
"symbol": "BTC",
"rank": "1",
"price_usd": "3591.95",
"price_btc": "1.0",
"24h_volume_usd": "3263990000.0",
"market_cap_usd": "59516499433.0",
"available_supply": "16569412.0",
"total_supply": "16569412.0",
"percent_change_1h": "1.02",
"percent_change_24h": "15.59",
"percent_change_7d": "-15.18",
"last_updated": "1505563475"
}
]
我正在使用 Jersey 来使用 API,我想将此 JSON 转换为一个对象。
这是应该通过解析 JSON 构建的对象:
public class CryptoCurrency {
String id;
String name;
String symbol;
String rank;
String price_usd;
String price_btc;
String market_cap_usd;
String available_supply;
String total_supply;
String percent_change_1h;
String percent_change_24h;
String percent_change_7d;
String last_updated;
}
这是我的代码:
public class CoinMarketCap {
public static void main(String[] args) {
Client client = ClientBuilder.newClient();
WebTarget target = client.target("https://api.coinmarketcap.com/v1/ticker/bitcoin/");
String bitoinDeteils = target.request(MediaType.TEXT_XML).get(String.class);
Gson gson = new GsonBuilder().create();
CryptoCurrency bitcoin = gson.fromJson(bitoinDeteils, CryptoCurrency.class);
System.out.println(bitcoin);
}
}
我得到一个错误
线程“主”com.google.gson.JsonSyntaxException 中的异常: java.lang.IllegalStateException:应为 BEGIN_OBJECT,但为 第 1 行第 2 列路径 $ 处的 BEGIN_ARRAY com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224) 在 com.google.gson.Gson.fromJson(Gson.java:887) 在 com.google.gson.Gson.fromJson(Gson.java:852) 在 com.google.gson.Gson.fromJson(Gson.java:801) 在 com.google.gson.Gson.fromJson(Gson.java:773) 在 com.randomizer.CoinMarketCap.main(CoinMarketCap.java:21) 原因: java.lang.IllegalStateException:应为 BEGIN_OBJECT,但为 第 1 行第 2 列路径 $ 处的 BEGIN_ARRAY com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385) 在 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:213) ... 5 更多
您发现我的代码有什么问题吗?谢谢。
【问题讨论】:
-
请也显示一个示例 JSON。似乎在某些时候 JSON 包含一个数组,但您尝试将其存储在一个对象中。
-
How to deserialize a JSON array using Gson 的可能重复项。您的 JSON 是一个仅包含一个对象的数组,因此您需要反序列化该数组。
-
1) 为什么要请求 XML 并尝试解析 JSON? 2) 打印
bitcoinDetails。这是什么? -
这是 JSON 作为字符串。我想把它反序列化成一个对象。
标签: java json parsing jersey gson