【问题标题】:Extracting a byte array from a JSON从 JSON 中提取字节数组
【发布时间】:2013-03-15 17:58:03
【问题描述】:

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

有人有什么想法吗?

【问题讨论】:

  • 你的数组应该在字符串中吗?
  • 你有一个数组,其中包含一个包含数组的对象。您首先需要索引数组,然后从结果对象中提取元素“指纹”。 “指纹”元素将是一个数组,大概是您想要的字节数组。
  • 但是@atw13 有一点,“指纹”元素显然是一个包含数组的字符串,因此您需要提取字符串,然后通过 JSON 解释器运行以提取数组。跨度>

标签: java json bytearray gson illegalstateexception


【解决方案1】:

您的 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);

希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多