【问题标题】:FCM message parsing to Java class using GSON使用 GSON 将 FCM 消息解析为 Java 类
【发布时间】:2017-01-14 14:26:40
【问题描述】:

我正在尝试解析 FCM 消息并构建 java 对象

FirebaseMessageService中payload被解析如下

// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
    Log.v(TAG, "Message data payload: " + remoteMessage.getData());

    Map<String, String> params = remoteMessage.getData();
    JSONObject object = new JSONObject(params);
    Log.v(">>JSON_OBJECTTOSTRING ", object.toString())

检索到的字符串是{"message":"[{\"mName\":\"Milk\",\"mUnit\":\"1 Litre\"},{\"mName\":\"curd\",\"mUnit\":\"1 Litre\"}]"}

上面的字符串在另一个类中被解析如下

JsonObject jo = new JsonParser().parse(order).getAsJsonObject();
JsonArray jsonArray = jo.getAsJsonArray("message");
itemList = new Gson().fromJson(jsonArray, GroceryItem[].class);

在作为数组检索时出现此错误,原因如下:

java.lang.ClassCastException: com.google.gson.JsonPrimitive 无法转换为 com.google.gson.JsonArray

你能帮帮我吗?

【问题讨论】:

  • 您的 json 字符串错误。 Json 字符串应该是这样的{\"message\":[{\"mName\":\"Milk\",\"mUnit\":\"1 Litre\"},{\"mName\":\"curd\",\"mUnit\":\"1 Litre\"}]}。我用这个 json 字符串解析。它有效。

标签: java parsing gson deserialization


【解决方案1】:

您的 JSON 包含编码为字符串的内部 JSON。如果您仔细查看message 属性,您会发现您应该再次解析它。比方说:

final Gson gson = new Gson();
final JsonParser jsonParser = new JsonParser();
// get the outer root the way you already do
final JsonObject outerRoot = jsonParser.parse(JSON).getAsJsonObject();
// pick the inner JSON as a string
final String innerJson = outerRoot.get("message").getAsJsonPrimitive().getAsString();
// and now you can parse it as a regular JSON
final JsonArray innerRoot = jsonParser.parse(innerJson).getAsJsonArray();
final GroceryItem[] groceryItems = gson.fromJson(innerRoot, GroceryItem[].class);
out.println(Arrays.toString(groceryItems));

以及输出(假设GroceryItem.toString() 方法以某种方式定义):

[GroceryItem{mName='Milk', mUnit='1 Litre'}, GroceryItem{mName='curd', mUnit='1 Litre'}]

【讨论】:

    猜你喜欢
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多