2017-09-16 147 views
0

所以我試圖解析使用GSON Java中的JSON對象。 我想從網站上使用API​​。 這是代碼: https://api.coinmarketcap.com/v1/ticker/bitcoin/解析JSON在JAVA USNG GSON

的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" 
    } 
] 

我使用澤西供消費的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但 BEGIN_ARRAY at line 1 column 2 path $ at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.read(ReflectiveTypeAdapterFactory.java:224) at com.google.gson.Gson.fromJson(Gson.java:887 )at com.google.gson.Gson.fromJson(Gson.java:852)at com.google.gson.Gson.fromJson(Gson.java:801)at com.google.gson.Gson.fromJson(Gson的.java:773)在 com.randomizer.CoinMarketCap.main(CoinMarketCap.java:21)產生的原因: java.lang.IllegalStateException:預期BEGIN_OBJECT但 BEGIN_ARRAY位於第1行第2列路徑$在 com.google。 gson.stream.JsonReader.beginObject(JsonReader.java:385)在 com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.read(R eflectiveTypeAdapterFactory.java:213) ... 5更多

您是否在我的代碼中看到任何錯誤?謝謝。

+0

請出示一個例子JSON了。看起來在某種程度上JSON包含一個數組,但您嘗試將其存儲在一個對象中。 – juzraai

+0

的[如何反序列化使用GSON JSON數組]可能的複製(https://stackoverflow.com/questions/10292514/how-to-deserialize-a-json-array-using-gson)。你的JSON是一個只包含一個對象的數組,所以你需要反序列化數組。 –

+0

1)爲什麼你要求XML並試圖解析JSON? 2)打印'bitcoinDetails'。它是什麼? –

回答

1

該錯誤消息說,JSON字符串包含一個數組(「BEGIN_ARRAY爲」),但你嘗試解析它作爲一個對象(「預期BEGIN_OBJECT」)。

正如我們在您提供的JSON字符串中可以看到的那樣,它確實是一個數組,您感興趣的對象被包裹在方括號中([ ... ])。

嘗試分析它例如作爲List<CryptoCurrency>,則:

Type listType = new TypeToken<ArrayList<CryptoCurrency>>(){}.getType(); 
List<CryptoCurrency> list = new Gson().fromJson(jsonString, listType); 

Typejava.lang.reflect.Type。)

+0

是的你是對的。我是JSON的新手,我甚至沒有看到唯一的對象是在數組中。我已經結束了我的代碼並將我的Wrapper(名爲CryptoCurrency)作爲一個數組。我改變了:\t \t CryptoCurrency [] arr = gson.fromJson(bitoinDeteils,CryptoCurrency []。class);然後只需訪問CryptoCurrency [0] – NotSure