java - 来自 gson 的详细异常消息?

标签 java json debugging gson

我正在尝试使用 gson(由 GsonFire 协助)解析一大块 JSON。它在某个地方抛出一个 JsonSyntaxException

我知道异常的含义,但我正在解析一个巨大的文件,如果我能找出哪个标记导致了异常,那将非常有帮助。有没有办法从 gson 获得更详细的输出?

异常如下:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:200)
    at com.google.gson.TypeAdapter.fromJsonTree(TypeAdapter.java:281)
    at io.gsonfire.gson.FireTypeAdapter.deserialize(FireTypeAdapter.java:93)
    at io.gsonfire.gson.FireTypeAdapter.read(FireTypeAdapter.java:52)
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)
    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:186)
    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145)
    at com.google.gson.TypeAdapter.fromJsonTree(TypeAdapter.java:281)
    at io.gsonfire.gson.FireTypeAdapter.deserialize(FireTypeAdapter.java:93)
    at io.gsonfire.gson.FireTypeAdapter.read(FireTypeAdapter.java:52)
    at com.google.gson.TypeAdapter.fromJsonTree(TypeAdapter.java:281)
    at io.gsonfire.gson.FireTypeAdapter.deserialize(FireTypeAdapter.java:93)
    at io.gsonfire.gson.FireTypeAdapter.read(FireTypeAdapter.java:52)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:103)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196)
    at com.google.gson.TypeAdapter.fromJsonTree(TypeAdapter.java:281)
    at io.gsonfire.gson.FireTypeAdapter.deserialize(FireTypeAdapter.java:93)
    at io.gsonfire.gson.FireTypeAdapter.read(FireTypeAdapter.java:52)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:103)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196)
    at com.google.gson.TypeAdapter.fromJsonTree(TypeAdapter.java:281)
    at io.gsonfire.gson.FireTypeAdapter.deserialize(FireTypeAdapter.java:93)
    at io.gsonfire.gson.FireTypeAdapter.read(FireTypeAdapter.java:52)
    at com.google.gson.Gson.fromJson(Gson.java:810)
    at com.google.gson.Gson.fromJson(Gson.java:775)
    at com.google.gson.Gson.fromJson(Gson.java:724)
    at com.google.gson.Gson.fromJson(Gson.java:696)
    at com.inin.util.BinarySerializable.fromJsonFile(BinarySerializable.java:90)
    at com.inin.util.BinarySerializable.fromJsonFile(BinarySerializable.java:83)
    at com.inin.simulation.App.main(App.java:35)
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING
    at com.google.gson.internal.bind.JsonTreeReader.expect(JsonTreeReader.java:139)
    at com.google.gson.internal.bind.JsonTreeReader.beginObject(JsonTreeReader.java:70)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:189)
    ... 29 more

最佳答案

Gson 2.3 ,你会得到一个更好的异常(exception)。它告诉您失败的 JSONPath,例如:

com.google.gson.JsonSyntaxException: Expected a boolean but was NUMBER at line 1 column 4728 path $.history[0].change_status.deletions  
  at com.google.gson.stream.JsonReader.nextBoolean()
  at com.google.gson.TypeAdapters$3.read()
  at com.google.gson.TypeAdapters$3.read()
  at com.google.gson.ReflectiveTypeAdapter$1.read()
  at com.google.gson.ReflectiveTypeAdapter$Adapter.read()
  at com.google.gson.ReflectiveTypeAdapter$Adapter.read()
  at com.google.gson.ReflectiveTypeAdapter$1.read()
  at com.google.gson.ReflectiveTypeAdapter$Adapter.read()
  ...

关于java - 来自 gson 的详细异常消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28975443/

相关文章:

java - 使用 Javassist 获取类中声明字段的索引以在字节码中使用

java - 这是java泛型吗?这怎么可能工作?

java - 使用 Gson get() 从 Json 获取值

json - Groovy JsonSlurper 日期反序列化

eclipse - 调试循环

xcode - 在 Xcode 8 中使 Thread Sanitizer 和 Address Sanitizer 选项可用需要什么

java - 定义我的所有 gradle 项目都可以看到的属性集

java - 这是适配器模式的正确实现吗?

java - 如何使用 Gson 获取 JSON 元素类型?

python - DEBUG = False 时与静态文件相关的 Django 错误 500