Java 从JSON中提取字节数组
我有以下格式的JSON:Java 从JSON中提取字节数组,java,json,bytearray,gson,illegalstateexception,Java,Json,Bytearray,Gson,Illegalstateexception,我有以下格式的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是: pub
[{"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,....]"}]
public class JSONFingerprint {
byte[] fingerprint;
public byte[] getfingerprintData() {
return fingerprint;
}
}
然后您需要将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());
{"fingerprint":[1,2,3,4,5,6,7,8,9,10]}
解决方案2:-
如果你的POJO不能改变(即)你的POJO将是这样
[{"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,....]"}]
public class JSONFingerprint {
byte[] fingerprint;
public byte[] getfingerprintData() {
return fingerprint;
}
}
然后您必须将JSON
格式更改为以下格式:-
JSONFingerprint[] dummy = new JSONFingerprint[0];
JSONFingerprint[] fingerPrint = gson.fromJson(json, dummy.getClass());
System.out.println(fingerPrint[0].getfingerprintData());
{"fingerprint":[1,2,3,4,5,6,7,8,9,10]}
您通常可以对其进行解析,正如您已经完成的:-
JSONFingerprint fingerprintData = gson.fromJson(obj, JSONFingerprint.class);
希望这对你有帮助 你的数组应该在字符串中吗?你有一个数组,其中包含一个包含数组的对象。首先需要对数组进行索引,然后从结果对象中提取元素“指纹”。“fingerprint”元素将是一个数组,它可能是您想要的字节数组。但是@atw13有一点,即“fingerprint”元素显然是一个包含数组的字符串,因此您需要提取字符串,然后通过JSON解释器运行该字符串来提取数组。