在给定的json文档中,如何验证是否存在json路径?
我使用的是jayway jsonpath,代码如下
JsonPath.read(jsonDocument, jsonPath)
上述代码可能会引发以下异常
通用域名格式。乱穿马路。jsonpath。PathNotFoundException:路径:$['a.b.c']没有结果
为了缓解这种情况,我打算在尝试使用JsonPath读取该路径之前验证该路径是否存在。阅读
作为参考,我看了以下两个文档,但没有真正得到我想要的。
如果您有一个检查多个路径的用例,您还可以使用配置创建一个JsonPath对象或
ReadContext
。
// Suppress errors thrown by JsonPath and instead return null if a path does not exist in a JSON blob.
Configuration suppressExceptionConfiguration = Configuration
.defaultConfiguration()
.addOptions(Option.SUPPRESS_EXCEPTIONS);
ReadContext jsonData = JsonPath.using(suppressExceptionConfiguration).parse(jsonString);
for (int i = 0; i < listOfPaths.size(); i++) {
String pathData = jsonData.read(listOfPaths.get(i));
if (pathData != null) {
// do something
}
虽然您确实可以捕获异常,但就像注释中提到的那样,可能有一种更优雅的方法来检查路径是否存在,而无需在代码中到处写尝试捕获块。
可以在jayway-jsonpath中使用以下配置选项:
com.jayway.jsonpath.Option.SUPPRESS_EXCEPTIONS
此选项处于活动状态时,不会引发异常。如果使用read方法,只要没有找到路径,它就会简单地返回null。
下面是一个JUnit 5和AssertJ的示例,展示了如何使用此配置选项,避免仅用于检查json路径是否存在的try/catch块:
@ParameterizedTest
@ArgumentsSource(CustomerProvider.class)
void replaceStructuredPhone(JsonPathReplacementArgument jsonPathReplacementArgument) {
DocumentContext dc = jsonPathReplacementHelper.replaceStructuredPhone(
JsonPath.parse(jsonPathReplacementArgument.getCustomerJson(),
Configuration.defaultConfiguration().addOptions(Option.SUPPRESS_EXCEPTIONS)),
"$.cps[5].contactPhoneNumber", jsonPathReplacementArgument.getUnStructuredPhoneNumberType());
UnStructuredPhoneNumberType unstructRes = dc.read("$.cps[5].contactPhoneNumber.unStructuredPhoneNumber");
assertThat(unstructRes).isNotNull();
// this path does not exist, since it should have been deleted.
Object structRes = dc.read("$.cps[5].contactPhoneNumber.structuredPhoneNumber");
assertThat(structRes).isNull();
}
问题内容: 有没有办法在不使用PHP的情况下检查变量是否为有效的JSON字符串?我没有PHP 5.3.3。 问题答案:
问题内容: 我有以下内容,其中是是,并且由表示: 我的应用程序中还实现了另一个。 我的问题是,从我的第二个中找出我是否包含特定内容的最佳方法是什么? 我尝试过但没有成功: 问题答案: 为什么不: 而且,如果您必须遍历整个,而不是只寻找一个特定值: 编辑 过去,我用一些Java 8惯用语对此进行了更新。 Java 8流API允许使用更具声明性(并且可以说是优雅的)的方式来处理这些类型的迭代。 例如,
问题内容: 因此,我从服务器获取了一些JSON值,但我不知道是否会有特定的字段。 像这样: 有时,还会有一个额外的字段,例如: 我想检查名为“ club”的字段是否存在,以便在解析时不会得到 org.json.JSONException:club的值 问题答案: JSONObject类具有一个名为“ has”的方法: http://developer.android.com/reference/o
问题内容: 我正在尝试使用Jackson JSON接受一个字符串,并确定它是否为有效JSON。谁能建议要使用的代码示例(Java)? 问题答案: 不知道您的用例是什么,但是应该这样做:
问题内容: 我使用sf.json库在Java Web应用程序中映射传入请求的表单数据。 可以说传入请求是http:// localhost:8080 / app / addProfile ,其表单数据为: 服务器端 : 这种方法的主要问题是,如果对结构进行少量修改,则需要修改整个代码。 有没有可以配置验证所需规则的api? 问题答案: 您可以使用Json验证器:-https: //github.c
我使用sf.json库来映射在java中的Web应用程序中传入请求的表单数据。 假设传入请求http://localhost:8080/app/addProfile表单数据为: 服务器端: 这种方法的主要问题是,如果在结构中有微小的修改,那么整个代码都需要修改。 是否有api可以配置验证所需的规则?