java - 运行 google place api 时出现 JsonParseException : The JsonDeserializer com. google.gson.DefaultTypeAdapters

标签 java json deserialization json-deserialization parameterized-types

我正在运行一个 google place api,我收到的响应是 json 格式,我还在 json 查看器中检查了它,

{
   "html_attributions" : [],
   "next_page_token" : "CvQB7AAAAKcVCYUk92u8YbCxucwIYZZoVsNOAX1utAinxpRnjirhCWRGYI1ozjaw-9JauOVcr8iOqsvGVR3n183oJ-saMliylmFcPdJ8HwhIpxwWr8EsXDuTk4SCIYfSfcpSflBaWMqorPnNHAVMz9HS3r4q8Hq-UUobHHfD8HZ4auX9eOzVHETQezM0eT8164h1qsRChdvzEQdsxu1nze6c3GI6xO_PByuSeI8tksFlrPm2P45cZda-_qpQlmn_ksZiCzTRnpPGYG0U7AgtpoiUK85WTAX5CkH7jFpjYFap6LSSv33ujQtFFk52CECLu_iudN78IhIQri7z9TjtM4StCVCRS0Do6RoUrMm6kpd4rUbKD7LkTqbq3o7DOZU",
   "results" : [
      {
         "geometry" : {
            "location" : {
               "lat" : -33.8599827,
               "lng" : 151.2021282
            },
            "viewport" : {
               "northeast" : {
                  "lat" : -33.8552624,
                  "lng" : 151.2031401
               },
               "southwest" : {
                  "lat" : -33.8657895,
                  "lng" : 151.2000123
               }
            }
         },
         "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png",
         "id" : "92f1bbd4ecab8e9add032bccee40a57a8dfd42b4",
         "name" : "Barangaroo",
         "place_id" : "ChIJ1ZL9NkGuEmsRUEkzFmh9AQU",
         "reference" : "CpQBhQAAAE4kOaitGfNEGHyhPnHMiP5NVmC9UsUYoYyOtBcO7zKBMNHR07V90Ohq6AV8qEWIAy0xpMvzlEimcdzW0KwdtCbUpWYKXFhby57oPCCUbMiIy_9yxPhtmnzcWFOMZqWWUnVxpYOW6hHR_JbLUbFRPZCSYqMJ9VL6xpxAbjulKVJFmJP4enq7MyeMe8rO0lJRCRIQelNwAky9wPZz9iyjcT7-UhoUGMbpbFWZZeZDjpOxJyipeWTTRxk",
         "scope" : "GOOGLE",
         "types" : [ "locality", "political" ],
         "vicinity" : "Barangaroo"
      }]
}

我已经用这种方式使用了模型 1.GooglePlacesModel是包含List结果的主模型;和 2.PlacesMainModel包含List几何图形;我再次根据需要使用子模型 现在我可以接收结果数组中的字符串字段(如名称、图标),但无法接收几何字段(如位置) 我发现了以下堆栈跟踪

GooglePlacesModel plcModel = gson.fromJson(resultedPLaces, GooglePlacesModel.class);
where resultedPLaces is the json string as it is above,




 googleapis.com:443][total kept alive: 1; route allocated: 1 of 2; total allocated: 1 of 20]
    com.google.gson.JsonParseException: The JsonDeserializer com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@356dd6e9 failed to deserialized json object {"geometry":{"location":{"lat":-33.8599827,"lng":151.2021282}}} given the type com.google.gson.ParameterizedTypeImpl@53b59b06
        at com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:63)
        at com.google.gson.JsonDeserializationVisitor.invokeCustomDeserializer(JsonDeserializationVisitor.java:88)
        at com.google.gson.JsonObjectDeserializationVisitor.visitFieldUsingCustomHandler(JsonObjectDeserializationVisitor.java:116)
        at com.google.gson.ObjectNavigator.navigateClassFields(ObjectNavigator.java:158)
        at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:131)
        at com.google.gson.JsonDeserializationContextDefault.fromJsonObject(JsonDeserializationContextDefault.java:73)
        at com.google.gson.JsonDeserializationContextDefault.deserialize(JsonDeserializationContextDefault.java:51)
        at com.google.gson.Gson.fromJson(Gson.java:568)
        at com.google.gson.Gson.fromJson(Gson.java:515)
        at com.google.gson.Gson.fromJson(Gson.java:484)
        at com.google.gson.Gson.fromJson(Gson.java:434)
        at com.google.gson.Gson.fromJson(Gson.java:406)
        at com.webapp.actions.api.places.NearByPlacesAction.getNrByPlaces(NearByPlacesAction.java:88)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:140)
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:158)
        at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:152)
        at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:101)

最佳答案

2.PlacesMainModel 包含列表几何图形;

Geometry 不是 JSONArray,因此您不能将其视为列表,它是一个简单的嵌套 json 对象。

为几何体创建另一个模型并在列表几何体的位置使用它。

关于java - 运行 google place api 时出现 JsonParseException : The JsonDeserializer com. google.gson.DefaultTypeAdapters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27309645/

相关文章:

java - 如何在 java 中从 couchbase 获取 json 文档?

c# - 没有对象定义的二进制反序列化

c# - 如何强制对同名的派生类型进行 XML 反序列化?

java - 如何使用 Hibernate 从存储过程中检索输出参数

java - 具有已撤销 SSL 证书的 URL 的 HttpURLConnection 行为?

java - 当鼠标悬停在 JButton 上时如何停止启用 JButton?

c# - 从 MemoryStream 反序列化对象时出错

java - 从字符串中获取整数值并将其加倍

json - 我如何使用继承向Play框架中的许多类编写写操作

java向xml文档添加根元素