java - com.google.gson.JsonPrimitive 无法转换为 com.google.gson.JsonObject

标签 java android json

我有一个来自 PHP 的 json 列表:

$Json = '[{"test":"1", "message":"try it"}, 
{"test":"2", "message":"try it"}, {"test":"3", "message":"try it"} ...]';
$final = [ 'error' => '1', 'json' => json_encode($Json)];
die(json_encode($final));

从 Android 我可以显示这样的结果:

JsonParser jsonParser = new JsonParser();
JsonObject res = (JsonObject) jsonParser.parse(new Gson().toJson(response.body()));
Log.w("Return", response.body().toString());

到目前为止一切正常,但是当我尝试从返回的结果创建一个新的 Json 对象 时,我收到此错误消息:

com.google.gson.JsonPrimitive cannot be cast to com.google.gson.JsonObject

这是我所做的:

JsonObject json = (JsonObject) jsonParser.parse(new Gson().toJson(res.get("json").toString()));
Log.w("JSON", json.toString());

请问有什么解决办法吗?

最佳答案

首先,修复您的 PHP。

$Json = array(
    array('test' => '1', 'message' => 'try it'), 
    array('test' => '2', 'message' => 'try it')
  );
$final = array(
  'error' => '1', 
  'json' => $Json
);
die(json_encode($final, JSON_FORCE_OBJECT));

您不需要对已经有效的 JSON 字符串进行编码。


All works fine

你从未在那里使用过res。您按原样打印了响应正文。

Log.w("Return", response.body().toString());

这看起来不对。响应已经是一个 JSON 字符串,因此不需要 toJson

jsonParser.parse(new Gson().toJson(response.body()));

您的错误是本例中的“JsonPrimitive”是一个字符串,而不是一个 JSON 对象。


你应该这样做

final String body = response.body().toString(); // Or use response.raw(), if want raw response string
JsonParser jsonParser = new JsonParser();
JsonObject res = jsonParser.parse(body).getAsJsonObject();
Log.w("Return", res.toString());

如果你想要数据,那么你可以拥有

JsonArray data = res.getAsJsonArray("data");

或者,您需要创建一个 POJO 并反序列化您的数据列表。

class Data {
    String test, message;
}

关于java - com.google.gson.JsonPrimitive 无法转换为 com.google.gson.JsonObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43644376/

相关文章:

java - 如何更新SWT表中特定行的数据

java - 将给定日期转换为通用日期格式?

java - Android 如何禁用图案锁定

java - 如何从外部目录java调用client_secrets.json?

json - 定义类型以生成嵌套 JSON 的更好方法

java - 如何创建具有不同数量参数的对象?

java - 将整数快速打印到 Canvas 上且没有垃圾收集

c# - 使用 Xamarin 返回错误消息 REST API

android - 检测与 WiFi 接入点的断开连接

java - 在 Spring MVC Controller 中反序列化 json 数组