【问题标题】:GSON sends my object as a string not a objectGSON 将我的对象作为字符串而不是对象发送
【发布时间】:2014-08-12 15:51:27
【问题描述】:

我正在使用带有 GSON 的 Volley,我需要将一个对象作为参数发送给我的调用。

这就是我做对象的方式:

JSONObject params = new JSONObject();
        Gson gson = new Gson();
        String json = gson.toJson(route);
params.put("route", json);

然后我调用我的 Volley JsonObjectRequest 函数。

问题是参数看起来像这样:

{"route":"{\"bounds\":{\"northeast\":{\"lat\":52.3777194,\"lng\":4.924666999999999},\"southwest\":{\"lat\":52.36881109999999,\"lng\":4.9011479}},\"copyrights\":\"Map data ©2014 Google\", etc...}"

如您所见,它不是将其作为对象发送,而是将其作为 String 发送,这就是为什么我在 {} 之前(在对象开始之前)得到 "。参数应该如下所示:

   {"route":{\"bounds\":{\"northeast\":{\"lat\":52.3777194,\"lng\":4.924666999999999},\"southwest\":{\"lat\":52.36881109999999,\"lng\":4.9011479}},\"copyrights\":\"Map data ©2014 Google\", etc...}

所以在 { 之前没有 " 像这样:

{"route":{myObject}

我在这里做错了什么?

【问题讨论】:

  • 您是否对内部结构进行双重 json 编码? json 编码应该在整个数据结构完成后进行一次。一旦你对某些东西进行了 json 编码,它就是一个字符串。并再次对其进行编码只会将该字符串编码为另一个 json 字符串,所有 json-metachars 都会转义。

标签: android json parsing object gson


【解决方案1】:

您不想混合使用 JSONObject 和 GSON。 那是 2 个不同的库。

使用gson.toJsonTree获取一个元素,然后使用JsonObject代替JSONObject:

JsonObject params = new JsonObject();
Gson gson = new Gson();
params.add("route", gson.toJsonTree(route));

【讨论】:

  • 问题是来自 Volley 的 JsonObjectRequest 在构造函数中询问“org.json.JSONOBJECT”而不是 com.google.Json.JsonObject,我该如何解决这个问题?
  • 创建一个自定义的 JsonRequest 对象来做到这一点不应该超过 20 行。看看JsonObjectRequest的实现来获得灵感
猜你喜欢
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 2020-10-18
  • 2020-04-16
  • 1970-01-01
  • 2021-11-03
相关资源
最近更新 更多