Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式从JSON响应中提取所有状态代码_Java_Regex_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Java,Regex,elasticsearch" /> elasticsearch,Java,Regex,elasticsearch" />

Java 使用正则表达式从JSON响应中提取所有状态代码

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

我想从JSON响应(对a的响应)中提取所有状态代码,以便计算创建了多少文档以及出错了多少文档

在下面的代码中应该使用哪个正则表达式

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主题,我发现了一个教程/示例,可以帮助您: