java - Android Java 正则表达式匹配

标签 java android regex

我正在尝试拉出琴弦:

 [{"name":"John Doe Jr."},{"name2":"John Doe"}] & {"name":"John Doe"} 

来自以下 JSON 字符串中的有效负载:

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

{"to":"broadcast", "type":"50", "payload":{"name":"John Doe"}}

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

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

Matcher matcher = pattern.matcher(jsonString);

我收到一个 IllegalStateException:到目前为止没有成功的匹配

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

还有如何获得它找到的匹配项的数量?

如有任何帮助,我们将不胜感激。

最佳答案

这应该有效:

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

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

一些注意事项:

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

对于 Android 的 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");
}

关于java - Android Java 正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12123884/

相关文章:

java - 正则表达式永远不会匹配

java - ClassLoader 引用未知路径

android - 如何将 Google Play 发布前报告与 expo/react-native 结合使用

regex - 如何验证美国社会保险号?

c++ - 使用模式正则表达式匹配的排序目录列表

Android Matrix.multiplyMV 没有通过翻译改变我的结果

java - 多行 lambda

java - MouseEvent 在 JScrollPane 中丢失

java - 通过 AJAX CALL 从 SPRING MVC 3 CONTROLLER 获取 JAVA LIST 到 JQUERY 的示例程序

android - 居中单选按钮