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

时间:2017-04-26 20:57:24

标签: 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 Object时,我收到以下错误消息:

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());

有任何修复吗?

1 个答案:

答案 0 :(得分:3)

首先,修复你的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字符串。

  

一切正常

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

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

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

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

您的错误是“JsonPrimitive”在这种情况下是一个String,它不是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;
}