Articles of gson

在Retrofit中序列化查询参数

想象一下以下要求: @POST(“/recipes/create”) void createRecipe(@Query(“recipe”) Recipe recipe, Callback callback); 我想要json(食谱),但不幸的是我的请求只是调用toString()为我的食谱,它根本不起作用。 我可以覆盖Recipe中的toString,但我宁愿有一个通用的解决方案。 我不能使用@Body,因为我需要指定,我要发送的内容(我需要“recipe = json(theRecipe)”)。 我也无法更改序列化以添加“recipe =”,因为我不负责服务器。 目前我正在使用QueryMap Map,我放入了一个序列化对象。 虽然这有效,但在我看来,这不是一个非常好的解决方案。 我可以以某种方式拦截改装适配器吗?

Kotlin Gson反序列化

我收到一个有地图包装表的JSON数据模型。 我正在尝试使用generics传递超出包装器的types,但它在运行时不能很好地转换。 这是我的JSON文件的示例: { “Table”: [ { “paymentmethod_id”: 1, “paymentmethod_description”: “Cash”, “paymentmethod_code”: “Cash”, “paymentmethod_is_ach_onfile”: false, “paymentmethod_is_element”: false, “paymentmethod_is_reward”: false, “paymentmethod_is_openedgeswipe”: false, “paymentmethod_update_user_id”: 1, “paymentmethod_insert_user_id”: 1, “paymentmethod_insertdate”: “2014-10-07 14:53:16”, “paymentmethod_deleted”: false, “paymentmethod_is_mobile_visible”: true } ] } 我正在使用的包装类名为Table。 data class Table( @SerializedName(“Table”) val models : Array ) 实际的模型类是PaymentMethod。 data class PaymentMethod( @SerializedName(“paymentmethod_id”) val idNumber : Int = […]

使用Retrofit时手动解析部分响应

我正在使用一个REST API,它返回一个JSON文档,该文档以如下方式开始,并包含一个带有字符串ID(如“ABC”)的项目的“集合”。 注意“routes”字段,它包含一系列名为“ABC”,“ABD”,“ABE”等的字段,但是路由在json中没有表示为数组,所以所有这些 { “status”:true, “page”:1, “per_page”:500, “total_count”:1234, “total_pages”:8, “total_on_page”:500, “routes”:{ “ABC”:[ { “value”:22313, 我正在使用Retrofit,问题是routes字段不是数组(尽管事实上它确实是这样)并且Retrofit / Gson要求我为具有字段variablesabc,abd等的路由创建模型对象 – 这不是实际的数据变化。 由于各种原因,更改服务器API很难,所以我希望在Android客户端上解决这个问题。 我认为这些是选项: 在它到达Gson之前拦截JSON文档并调整文档,可能使用自定义的Gson解析器,或者拦截HTTP响应。 绕过JSON解析,从Retrofit获取JSON文档(我还没弄清楚如何做到这一点,或者是否可能) 使用我不知道的Retrofit的一些function将字段名称映射到集合。 我很感激帮助,特别是如果有一个快速简便的方法来解决这个问题。

将ArrayList与Gson转换为String

我有一个包含ArrayLists ,Root列表中的每个ArrayList包含一个Integers ArrayList和一个Strings 。 我正在将它与Gson转换为String以使用SharedPreferences保存它。 但是当我重新转换它时,Gson给了我2.131558489E9而不是原来的int 2131558489 。 我该如何解决这个问题? 最好的祝福。 这是我如何转换ArrayList:levelPattern是ArrayList String levelPatternGson = new Gson().toJson(levelPattern); 这就是我将其转换回来的方式: levelPattern = new Gson().fromJson(levelPatternGson, ArrayList.class);

GSON使用Retrofit解析Flickr JSON响应进行解析

我好像有以下问题。 我正在使用改造来获取JSON文件并将其解析为java对象。 我正在考虑的url是: https : //api.flickr.com/services/rest/?method = tvl.photos.search&api_key = 2ef592bfddc86f508550184ec706a2fc&tags=gent&per_page=2&format=json 回复: jsonFlickrApi({“photos”:{“page”:1,”pages”:130008,”perpage”:2,”total”:”260016″,”photo”:[{“id”:”15817874286″,”owner”:”36687364@N07″,”secret”:”e480e6fe0c”,”server”:”7475″,”farm”:8,”title”:”3D visualisatie”,”ispublic”:1,”isfriend”:0,”isfamily”:0},{“id”:”15817785516″,”owner”:”36687364@N07″,”secret”:”132f12dff1″,”server”:”7496″,”farm”:8,”title”:”schetsontwerp”,”ispublic”:1,”isfriend”:0,”isfamily”:0}]},”stat”:”ok”}) 我相信问题在于响应前面的jsonFlickrApi。 执行以下代码时: @GET(“/rest/”) void getPhotos(@Query(“method”) String method,@Query(“api_key”) String apiKey,@Query(“tags”) String tags,@Query(“per_page”)String perPage,@Query(“format”) String format, Callback data); 和 flickerRestAPI.getPhotos(“flickr.photos.search”,”2ef592bfddc86f508550184ec706a2fc”,”gent”,”10″,”json”,new Callback() { @Override public void success(FlickrResult photos, Response response) { Log.i(TAG, ” ” + photos.toString()); } @Override public void failure(RetrofitError error) { Log.e(TAG,”Failed”); Log.e(TAG,” […]

Android gson流解析器还是android.util.jsonreader?

我想在Android应用程序中使用流式json解析器,我想知道是否使用gson或android.util.jsonreader库。 假设许可和版本兼容性不是问题,我应该优先考虑: 我处理几MB的数据。 JSON主要由压缩字符串组成,所以我真的不需要Object to JSON映射。

将包含JodaTime对象的自定义对象序列化为JSON

运行第二个创建对象的活动并将其存储到Singleton内的ArrayList后,从创建Activity返回到第一个Activity时会出现此错误。 logcat的: 10-09 15:00:48.125: E/AndroidRuntime(4266): FATAL EXCEPTION: main 10-09 15:00:48.125: E/AndroidRuntime(4266): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nanospark.cnc/com.nanospark.cnc.ContactCreateActivity}: java.lang.RuntimeException: Failed to invoke public org.joda.time.Chronology() with no args 10-09 15:00:48.125: E/AndroidRuntime(4266): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 10-09 15:00:48.125: E/AndroidRuntime(4266): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 10-09 15:00:48.125: E/AndroidRuntime(4266): at android.app.ActivityThread.access$600(ActivityThread.java:141) 10-09 15:00:48.125: E/AndroidRuntime(4266): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 10-09 15:00:48.125: E/AndroidRuntime(4266): at android.os.Handler.dispatchMessage(Handler.java:99) 10-09 15:00:48.125: E/AndroidRuntime(4266): at […]

JSON错误“java.lang.IllegalStateException:预期BEGIN_OBJECT但在第1行第1行路径$ STRING”

public interface UserService { @POST(Constants.Api.URL_REGISTRATION) @FormUrlEncoded BaseWrapper registerUser(@Field(“first_name”) String firstname, @Field(“last_name”) String lastname, @Field(“regNumber”) String phone, @Field(“regRole”) int role); public BaseWrapper registerUser(User user) { return getUserService().registerUser(user.getFirstName(), user.getLastName(), user.getPhone(), user.getRole()); } 这会创建exception com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ 非常感谢您的帮助。

Gson序列化HashMap <Teacher,List >

我有一张地图,其中一个键的值是一个对象列表。 能够通过builder.enableComplexMapKeySerialization();序列化密钥builder.enableComplexMapKeySerialization(); 但是这些值没有按预期序列化,因为它们在反序列化而不是对象上返回一个字符串。 下面是序列化的输出 [{“id”:31001,“name”:老师“]},//这是关键 [{“id”:33033,“name”:“student1”},{“id”:34001,“name”:“student2”}]],//这是值列表 我使用了相关的TypeToken,它是TypeToken<HashMap<Teacher, List>>但仍然在列表值上返回反序列化而不是对象的字符串。

Retrofit – 在将其解析为json之前从响应主体中删除一些无效字符

我有一个外部Web服务,在响应主体中返回json但嵌套在括号中,如下所示: ({“door_x”:”103994.001461″,”door_y”:”98780.7862376″, “distance”:”53.3″}) 使用此代码: class AddressInfo { String door_x; String door_y; } interface AddressWebService { @GET(“/reversegeocoding”) AddressInfo reverseGeocoding(@Query(“x”) double x, @Query(“y”) double y); } 它显然失败了。 这是堆栈跟踪: retrofit.RetrofitError: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:377) at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:240) at com.something.$Proxy7.reverseGeocoding(Native Method) at com.something.ReverseGeocodingService.getAddress(ReverseGeocodingService.java:24) at com.something.LocationProvider$1.run(LocationProvider.java:77) at java.lang.Thread.run(Thread.java:864) Caused by: retrofit.converter.ConversionException: […]