在 JSON 断言 java 中使用 REGEX 验证 JSON 字符串
Validate JSON String using REGEX in JSONAssert java
我将预期的 json 字符串存储在资源下的 json 文件中,如下所示。 json 字符串由正则表达式组成。我正在使用 JSONAssert 库比较两个 json 字符串。
{
"timestamp": "^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}+\d{4}$",
"status": 415,
"error": "Unsupported Media Type",
"message": "Content type 'text/plain;charset=ISO-8859-1' not supported",
"path": "/service/addUser"
}
我的实际响应包含这种格式的时间戳 2018-11-13T04:10:11.233+0000
JSONAssert.assertEquals(getJsonBody(expected), response.asString(),false);
正则表达式总是出现以下错误
java.lang.AssertionError: timestamp
Expected: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}+\d{4}$
got: 2018-11-13T04:12:55.923+0000
关于这个错误有什么建议吗?
您正在将模式与时间戳字符串进行比较。您实际需要做的是检查时间戳 是否匹配 模式。
试试这个代码:-
String expected = "{\n" +
" \"timestamp\": \"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}\\+\\d{4}$\",\n" +
" \"status\": 415,\n" +
" \"error\": \"Unsupported Media Type\",\n" +
" \"message\": \"Content type 'text/plain;charset=ISO-8859-1' not supported\",\n" +
" \"path\": \"/service/addUser\"\n" +
"}";
String actual = "{\n" +
" \"timestamp\": \"2018-11-13T04:12:55.923+0000\",\n" +
" \"status\": 415,\n" +
" \"error\": \"Unsupported Media Type\",\n" +
" \"message\": \"Content type 'text/plain;charset=ISO-8859-1' not supported\",\n" +
" \"path\": \"/service/addUser\"\n" +
"}";
JSONAssert.assertEquals(
expected,
actual,
new CustomComparator(
JSONCompareMode.LENIENT,
new Customization("***", new RegularExpressionValueMatcher<>())
)
);
所以对于你的代码,它看起来像:-
JSONAssert.assertEquals(
getJsonBody(expected),
response.asString(),
new CustomComparator(
JSONCompareMode.LENIENT,
new Customization("***", new RegularExpressionValueMatcher<>())
)
);
我将预期的 json 字符串存储在资源下的 json 文件中,如下所示。 json 字符串由正则表达式组成。我正在使用 JSONAssert 库比较两个 json 字符串。
{
"timestamp": "^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}+\d{4}$",
"status": 415,
"error": "Unsupported Media Type",
"message": "Content type 'text/plain;charset=ISO-8859-1' not supported",
"path": "/service/addUser"
}
我的实际响应包含这种格式的时间戳 2018-11-13T04:10:11.233+0000
JSONAssert.assertEquals(getJsonBody(expected), response.asString(),false);
正则表达式总是出现以下错误
java.lang.AssertionError: timestamp
Expected: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}+\d{4}$
got: 2018-11-13T04:12:55.923+0000
关于这个错误有什么建议吗?
您正在将模式与时间戳字符串进行比较。您实际需要做的是检查时间戳 是否匹配 模式。
试试这个代码:-
String expected = "{\n" +
" \"timestamp\": \"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}\\+\\d{4}$\",\n" +
" \"status\": 415,\n" +
" \"error\": \"Unsupported Media Type\",\n" +
" \"message\": \"Content type 'text/plain;charset=ISO-8859-1' not supported\",\n" +
" \"path\": \"/service/addUser\"\n" +
"}";
String actual = "{\n" +
" \"timestamp\": \"2018-11-13T04:12:55.923+0000\",\n" +
" \"status\": 415,\n" +
" \"error\": \"Unsupported Media Type\",\n" +
" \"message\": \"Content type 'text/plain;charset=ISO-8859-1' not supported\",\n" +
" \"path\": \"/service/addUser\"\n" +
"}";
JSONAssert.assertEquals(
expected,
actual,
new CustomComparator(
JSONCompareMode.LENIENT,
new Customization("***", new RegularExpressionValueMatcher<>())
)
);
所以对于你的代码,它看起来像:-
JSONAssert.assertEquals(
getJsonBody(expected),
response.asString(),
new CustomComparator(
JSONCompareMode.LENIENT,
new Customization("***", new RegularExpressionValueMatcher<>())
)
);