Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从JSON中提取字节数组_Java_Json_Bytearray_Gson_Illegalstateexception - Fatal编程技术网

Java 从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

我有以下格式的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)

有人有什么想法吗

您的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,....]"}]
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解释器运行该字符串来提取数组。