正则表达式查找具有空值的属性

时间:2017-01-05 15:54:35

标签: java regex rest-assured

我使用REST Assured框架进行API测试,并且在查找具有空值的属性时遇到了一些困难。我真的对正则表达式一无所知:P

因此,API响应就像

"data": [
        {
            "type": "social",
            "id": "164",
            "attributes": {
                "created_time": "2014-09-12",
                "currency": "INR",
                "budget": 381000,
                "end_time": null,
                "name": "Untitled",
                "start_time": "2022-09-12",
                "updated_time": "2014-09-12"
            }

我需要找到具有"end_time"之类空值的属性。 如果还有其他方法可以找到这样的属性,那将非常有用。

提前致谢!!

1 个答案:

答案 0 :(得分:1)

要在JSON文本中搜索null属性,可以使用以下正则表达式:

/"([^"]+)": null/

上面的正则表达式将在组1中捕获值为null的所有属性。

说明:

  • " - 匹配报价
  • - 捕获组的开始
  • [^"] + - 将匹配(捕获)一个或多个非引用的字符
  • - 捕获组结束
  • " - 匹配报价
  • :null - 字面匹配冒号,后跟空格,后跟null

以上解释翻译成普通英语:捕获引号之间的所有字符,后跟冒号,空格和null

根据您用于执行正则表达式的语言,您需要指定全局标志以匹配所有属性。第一个匹配组通常是结果的第一个元素,是数组。

根据您的语言,正斜杠' /'可能是必需的 - 可以将正则表达式指定为字符串,或者语言可以支持正则表达式 - 使用斜杠。最近,通常在结束斜杠后添加g来指定全局标志。

在Java中

import java.util.regex.Matcher;
import java.util.regex.Pattern;

// Retrieve response from the REST API    
String json_response = receiveResponse();

// Define the regex pattern
String pattern = "\"([^\"]+)" *: *null";

// Create a Pattern object
Pattern r = Pattern.compile(pattern);

// Now create matcher object.
Matcher m = r.matcher(json_response);
if (m.find( )) {
   // Print the entire match
   System.out.println("Found value: " + m.group(0) );   // > "end_time": null
   // Print capture group 1
   System.out.println("Found null for: " + m.group(1) ); // > end_time
} else {
  System.out.println("NO MATCH");
}

您可以遍历所有匹配的字段:

while (m.find( )) {
   System.out.println("Found value: " + m.group(0) );
   System.out.println("Found null for: " + m.group(1) );
}