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不匹配。对此有两种可能的解决方案。

解决方案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 回答