我正在尝试拉出琴弦:
[{"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/