首页 > 解决方案 > 如何从android中的原始有效负载中提取价值?

问题描述

我正在尝试从以下 JSON 中提取 google.sent_time ,如何获得该值?
看起来它是一个原始有效负载,而不是简单的 JSON,所以想知道是否有办法提取它?

{
  "notificationID": "677291f5-a784-43df-af2e-0067e9c",
  "title": "test 223",
  "body": "payload",
  "lockScreenVisibility": 1,
  "groupMessage": "",
  "fromProjectNumber": "819539062812",
  "priority": 5,
  "rawPayload": "{\"google.delivered_priority\":\"normal\",\"google.sent_time\":1591849563191,\"google.ttl\":259200,\"google.original_priority\":\"normal\",\"custom\":\"{\\\"i\\\":\\\"677291f5-a784-43df-af2e-0363a4067e9c\\\"}\",\"oth_chnl\":\"\",\"pri\":\"5\",\"vis\":\"1\",\"from\":\"819539062812\",\"alert\":\"payload\",\"title\":\"test 223\",\"grp_msg\":\"\",\"google.message_id\":\"0:1591849563205759%409ebbcaf9fd7ecd\",\"google.c.sender.id\":\"819539062812\",\"notificationId\":-1451117355}"
}

标签: javaandroidandroid-jsonandroid-parser

解决方案


它是 JSON,转义了一些字符,因此它可以适合主 JSON 中的字符串类型字段。

您可以将“rawPayload”字段的字符串值提取到您正在使用的任何 JSON 解析器的提要中,或者您可以直接在字符串上使用正则表达式来获取值:

这是一个正则表达式示例:

Pattern p = Pattern.compile("google\\.sent_time.*:(\\d+)");
Matcher m = p.matcher(yourInputString);
m.find();
String sentTime = m.group(1);

推荐阅读