我有以下格式的 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)
有人有什么想法吗?
最佳答案
您的 JSON 和 POJO 似乎不匹配。对此有两种可能的解决方案。
解决方案 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);
希望这对您有帮助!
关于java - 从 JSON 中提取字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15628603/