2

次の形式の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)

誰かアイデアはありますか?

4

1 に答える 1

3

JSONPOJOが一致していないようです。これには2つの可能な解決策があります。

解決策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]}

すでに行ったように、通常はこれを解析できます:-

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

これがお役に立てば幸いです。

于 2013-03-26T03:31:52.780 に答える