我正试图拔出字符串:
[{"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字符串,最好只返回一个元素,而不是直接返回元素.因此,您无需编写额外的代码来读取单个元素.
使用Androids 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");
}
标签:android,java,regex
来源: https://codeday.me/bug/20190729/1571617.html