2013-03-26 38 views
1

提取的字節數組,我有以下格式的JSON:從JSON

[{"fingerprint":"[79,0,0,0,18,0,0,0,18,0,0,0,19,0,0,0,23,0,0,0,40,0,0,0,42,0,0,0,63,0,0,0,68,0,0,0,71,0,....]"}] 

我一直在試圖利用從中提取的字節數組如下:

JSONFingerprint fingerprintData = gson.fromJson(obj, JSONFingerprint.class); 

凡JSONFingerprint是:

public class JSONFingerprint { 

    byte[] fingerprint; 

    public byte[] getfingerprintData() { 
     return fingerprint; 
    } 

} 

我已經收到此錯誤:

Exception in thread "Thread-0" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176) 
    at com.google.gson.Gson.fromJson(Gson.java:795) 
    at com.google.gson.Gson.fromJson(Gson.java:859) 
    at com.google.gson.Gson.fromJson(Gson.java:832) 

有沒有人有任何想法?

+0

你的數組應該在一個字符串內嗎? – atw13 2013-03-26 03:05:47

+0

你有一個包含一個包含數組的對象的數組。您首先需要索引數組,然後從結果對象中提取元素「指紋」。 「指紋」元素將是一個數組,它可能是你想要的字節數組。 – 2013-03-26 03:24:01

+0

但@ atw13有一點,指紋元素顯然是一個包含數組的字符串,因此您需要提取字符串,然後通過JSON解釋器運行該提取數組。 – 2013-03-26 03:25:23

回答

3

看來你的JSONPOJO不匹配。可以有兩種可能的解決方案。

解決方案1: -

如果你不能改變JSON格式(即)你JSON是會是這樣,

[{"fingerprint":"[79,0,0,0,18,0,0,0,18,0,0,0,19,0,0,0,23,0,0,0,40,0,0,0,42,0,0,0,63,0,0,0,68,0,0,0,71,0,....]"}] 

然後,你需要你的JSONFingerprint類改成這樣: -

public class JSONFingerprint { 

    String fingerprint; 

    public String getfingerprintData() { 
     return fingerprint; 
    } 
} 

,你需要分析你JSON這樣的: -

JSONFingerprint[] dummy = new JSONFingerprint[0]; 
JSONFingerprint[] fingerPrint = gson.fromJson(json, dummy.getClass()); 
System.out.println(fingerPrint[0].getfingerprintData()); 

解決方案2: -

如果你的POJO不能改變(即)你的POJO是會是這樣,

public class JSONFingerprint { 

    byte[] fingerprint; 

    public byte[] getfingerprintData() { 
     return fingerprint; 
    } 
} 

然後,你有你的JSON格式更改爲像這樣: -

{"fingerprint":[1,2,3,4,5,6,7,8,9,10]} 

你可以通常解析它,因爲你已經d一: -

JSONFingerprint fingerprintData = gson.fromJson(obj, JSONFingerprint.class); 

希望這可以幫助你!