Java 使用正则表达式从JSON响应中提取所有状态代码
我想从JSON响应(对a的响应)中提取所有状态代码,以便计算创建了多少文档以及出错了多少文档 在下面的代码中应该使用哪个正则表达式Java 使用正则表达式从JSON响应中提取所有状态代码,java,regex,elasticsearch,Java,Regex,elasticsearch,我想从JSON响应(对a的响应)中提取所有状态代码,以便计算创建了多少文档以及出错了多少文档 在下面的代码中应该使用哪个正则表达式 import java.util.regex.Matcher; import java.util.regex.Pattern; ... List<String> allCodes = new ArrayList<String>(); Matcher m = Pattern.compile("regex").matcher(j
import java.util.regex.Matcher;
import java.util.regex.Pattern;
...
List<String> allCodes = new ArrayList<String>();
Matcher m = Pattern.compile("regex").matcher(jsonResponseString);
while (m.find()) {
allCodes.add(m.group());
}
谢谢 List allCodes=new ArrayList();
List<String> allCodes = new ArrayList<String>();
Matcher m = Pattern.compile("\"status\": (\\d.*)").matcher(YOUR_TEXT);
while (m.find()) {
allCodes.add(m.group(1));
}
System.out.println(allCodes);
Matcher m=Pattern.compile(“\'status\”:(\\d.*).Matcher(您的\u文本);
while(m.find()){
所有代码。添加(m组(1));
}
系统输出打印项次(所有代码);
但我会创建一个Pojo,其中包含您想要的信息:
e、 g
公共类响应{
int-take;
清单项目清单;
类项目{
智力状态;
}
}
然后使用jackson转换
顺便说一句,elasticsearch有一个java api:因此您不需要处理解析等操作。List allCodes=new ArrayList();
Matcher m=Pattern.compile(“\'status\”:(\\d.*).Matcher(您的\u文本);
while(m.find()){
所有代码。添加(m组(1));
}
系统输出打印项次(所有代码);
但我会创建一个Pojo,其中包含您想要的信息:
e、 g
公共类响应{
int-take;
清单项目清单;
类项目{
智力状态;
}
}
然后使用jackson转换
顺便说一句,有一个用于elasticsearch的java api:因此您不需要处理解析等。如果状态只是一个数字,您可以使用类似以下内容
\“status\”:\s+(\d+)
。另外,如果您使用group()
,您将获得所有匹配的序列:“状态”:200,“状态”:201
List<String> allCodes = new ArrayList<>();
Matcher m = Pattern.compile("\"status\":\\s+(\\d+)").matcher(jsonResponseString);
while (m.find()) {
allCodes.add(m.group(1));
}
System.out.println(allCodes);
List allCodes=new ArrayList();
Matcher m=Pattern.compile(“\”status\”:\\s+(\\d+)).Matcher(jsonResponseString);
while(m.find()){
所有代码。添加(m组(1));
}
系统输出打印项次(所有代码);
如果状态只是一个数字,您可以使用类似以下内容的内容:\s+(\d+)。另外,如果您使用group()
,您将获得所有匹配的序列:“状态”:200,“状态”:201
List<String> allCodes = new ArrayList<>();
Matcher m = Pattern.compile("\"status\":\\s+(\\d+)").matcher(jsonResponseString);
while (m.find()) {
allCodes.add(m.group(1));
}
System.out.println(allCodes);
List allCodes=new ArrayList();
Matcher m=Pattern.compile(“\”status\”:\\s+(\\d+)).Matcher(jsonResponseString);
while(m.find()){
所有代码。添加(m组(1));
}
系统输出打印项次(所有代码);
正如评论中所建议的,您不应该使用正则表达式。如果您认为解析完整的JSON图太占用内存,并且不想使用弹性搜索Java客户端,您可能需要考虑:
轻量级库,与XML的XPath相似,但与JSON相似。它不会将完整的模型解析到内存中,而是将其流化,并根据您提供的路径仅提取匹配的元素。在这种情况下,此路径类似于:
$.items[?(@status = 200)]
我认为,您甚至可以使用
.length()
,让表达式立即返回您要查找的计数,而无需手动计算匹配的元素…正如注释中所建议的,您不应该使用正则表达式。如果您认为解析完整的JSON图太占用内存,并且不想使用弹性搜索Java客户端,您可能需要考虑:
轻量级库,与XML的XPath相似,但与JSON相似。它不会将完整的模型解析到内存中,而是将其流化,并根据您提供的路径仅提取匹配的元素。在这种情况下,此路径类似于:
$.items[?(@status = 200)]
我认为,您甚至可以使用
.length()
,让表达式立即返回所需的计数,而无需手动计算匹配的元素…为什么不使用jackson创建java对象,然后读取状态?是否可以保证这些对象在未来版本的elastic中不会更改?我们谈论的是成千上万的物品,我关心的是它们的性能。感谢您不要自己解析json。已经开发了用于处理json等的库。关于Elasticsearch主题,我发现了一个教程/示例,可以帮助您:为什么不使用jackson创建java对象,然后读取状态?是否可以保证这些对象在未来版本的elastic中不会更改?我们谈论的是成千上万的物品,我关心的是它们的性能。感谢您不要自己解析json。已经开发了用于处理json等的库。关于Elasticsearch主题,我发现了一个教程/示例,可以帮助您: