Android Java正则表达式匹配

use*_*397 4 java regex android

我正试图拔出字符串:

 [{"name":"John Doe Jr."},{"name2":"John Doe"}] & {"name":"John Doe"} 
Run Code Online (Sandbox Code Playgroud)

从下面的JSON字符串中的有效负载:

{"to":"broadcast", "type":"50", "payload":[{"name":"John Doe Jr."},{"name2":"John Doe"}]}

{"to":"broadcast", "type":"50", "payload":{"name":"John Doe"}}
Run Code Online (Sandbox Code Playgroud)

使用这个正则表达式代码:

Pattern pattern = Pattern.compile("\\{(.*?)\"payload\":\"(.*?)\"\\}\\}");

Matcher matcher = pattern.matcher(jsonString);
Run Code Online (Sandbox Code Playgroud)

我收到了IllegalStateException:到目前为止没有成功匹配

我的正则表达式出了什么问题?

另外如何获得它找到的匹配数量?

任何帮助,将不胜感激.

mic*_*cha 8

这应该工作:

String someJson ="{\"to\":\"broadcast\", \"type\":\"50\", \"payload\":[{\"name\":\"John Doe Jr.\"},{\"name2\":\"John Doe\"}]}";

Pattern p = Pattern.compile(".*?payload\":(.*)}");
Matcher m = p.matcher(someJson);
if (m.matches()) {
  String payload = m.group(1);
}
Run Code Online (Sandbox Code Playgroud)

之后,有效负载将具有值[{"name":"John Doe Jr."},{"name2":"John Doe"}] {"name":"John Doe"}

一些说明:

  • 只要有效内容元素是json字符串中的最后一个json对象,此正则表达式才有效.
  • 正如其他人所提到的:用json api做这个会更好(也更容易)(见下文)
  • 如果你可以控制json字符串,那么返回一个只包含一个元素而不是直接元素的数组可能会更好.因此,您无需编写额外的代码来读取单个元素.

有了机器人,JSONObject这可能是这样的:

JSONObject json = new JSONObject(someJson);
try {
  JSONArray payload = json.getJSONArray("payload");
} catch (Exception e) {
  // array conversion can fail for single object 
  JSONObject payload = json.getJSONObject("payload");
}
Run Code Online (Sandbox Code Playgroud)