Tag: jsonpath

使用MockMvc的Hamcrest:检查该键是否存在但值可能为null

我正在使用MockMvc进行一些测试,我想validationJSON响应的结构。 具体来说,我想确保属性的键存在,并且该值是某个类型或null。 { “keyToNull”: null, # This may be null, or a String “keyToString”: “some value” } 以下对我有用,但我想知道是否有办法将每组两个期望合并为一行,因为我有很多要检查的属性: import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import static org.hamcrest.Matchers.*; .andExpect(jsonPath(“$”).value(hasKey(“keyToNull”))) .andExpect(jsonPath(“$.keyToNull”).value( anyOf(any(String.class), nullValue(String.class)))) .andExpect(jsonPath(“$”).value(hasKey(“keyToString”))) .andExpect(jsonPath(“$.keyToString”).value( anyOf(any(String.class), nullValue(String.class)))) hasKey()是必需的,因为另一个断言本身通过,因为MockMvc的实现映射中不存在的键映射为null: .andExpect(jsonPath(“$.notAKey”).value( anyOf(any(String.class), nullValue(String.class)))) // ok jsonPath().exists()也不起作用,因为在内部它将值与null进行比较。 我考虑过这样一个单独的方法: private static void assertNullableAttr(ResultActions res, String jsonPath, Class type) throws Exception { int split = […]

SpringMVC / mockMVC / jsonpath比较字符串列表

我目前正在为Spring MVC项目编写一些unit testing。 由于返回的媒体类型是JSON,我尝试使用jsonPath检查是否返回了正确的值。 我遇到的麻烦是validation字符串列表是否包含正确的(并且只有正确的)值。 我的计划是: 检查列表是否具有正确的长度 对于应该返回的每个元素,检查它是否在列表中 可悲的是,这些东西似乎都没有用。 这是我的代码的相关部分: Collection correctRoles = magicDataSource.getRoles(); ResultActions actions = this.mockMvc.perform(get(“/accounts/current/roles”).accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) // works .andExpect(jsonPath(“$.data.roles”).isArray()) // works .andExpect(jsonPath(“$.data.roles.length”).value(correctRoles.size())); // doesn’t work for (AuthorityRole role : correctRoles) // doesn’t work actions.andExpect(jsonPath(“$.data.roles[?(@==’%s’)]”, role.toString()).exists()); 只有前两个“期望”(isOk&isArray)才有效。 其他的(长度和内容)我可以扭曲和转动,但我想,他们没有给我任何有用的结果。 有什么建议么?

如何使用java中的XPath / JsonPath更改json文件中的值

这是json文件 { “session”: { “name”:”JSESSIONID”, “value”:”5864FD56A1F84D5B0233E641B5D63B52″ }, “loginInfo”: { “loginCount”:77, “previousLoginTime”:”2014-12-02T11:11:58.561+0530″ } } 我想更改name.by的值直接给XPath / JsonPath Like ($.session.name).changevalue(“MYSESSINID”)这只是一个例子 我正确使用jackson库并使用以下代码通过XPath进行读取 ObjectMapper mapper = new ObjectMapper(); Object jsonObj=mapper.readValue(new File(Json file), Object.class); Object name=PropertyUtils.getProperty(jsonObj, “session.name”); System.out.println(“Name:”+name); 他们是一种通过XPath更改名称的方法 PropertyUtils.setProperty(jsonObj, “session.value”, “new value”); 仍然在文件中它无法正常工作。

如何使用jackson制作POJO并解析递归对象?

我有一个以下JSON响应,我从rest服务回来。 现在我需要将JSON响应下面的反序列化反转为POJO。 我正在和jackson合作。 { “pagination”: { “number”: 1, “entriesPerPage”: 200, “total”: 3 }, “postings”: [{ “categories”: [{ “taskid”: “79720”, “name”: “Sunglasses”, “parentCategory”: { “taskid”: “394”, “name”: “Sunglasses & Fashion Eyewear”, “parentCategory”: { “taskid”: “2340”, “name”: “Men’s Accessories”, “parentCategory”: { “taskid”: “10987”, “name”: “Clothing, Shoes & Accessories” } } } }] }, { “categories”: [{ “taskid”: […]

如何使用xpath编辑特定的xml

我有以下xml,使用xslt函数json-to-xml()生成。 我需要使用给定的xpath更新此xml,如结果xml中所示。 我需要java或xslt中的解决方案。 任何帮助将非常感激。 XML Lisa 200 applicaton/json ccc mmm 666 333 abc 2018 的XPath /Response/Payload/root/cars[2]/strength=999 /Response/Payload/root/bikes/model=2019 /Response/Headers/server=WebSphere /Response/Headers/Content-Type=text /Response/Payload/root/cars[2]/Capacity=555 /Response/Payload/root/cars[1]/model=mmm1 /Response/Payload/root/bikes/company=xyz /Response/Payload/root/cars[1]/company=ccc1 /Response/Headers/Status-Code=400 更新的结果XML WebSphere 400 text ccc1 mmm1 999 555 xyz 2019 我的尝试 我尝试使用xslt函数将此xml转换回json,然后使用com.jayway.jsonpath Jayway JsonPath库来解析/更改给定xpath上的json值。 然后最后使用xslt函数将json再次更改为xml。 这对我来说就像魅力一样! 但是在使用这个库之后我开始在我的应用程序的其他部分遇到问题:(。所有json请求体的发布请求开始给出400错误。错误是“错误400客户端发送的请求在语法上不正确”。我不能找出问题并且可能是由于不同的jar骗局。所以我正在尝试其他方式工作。任何其他库如Jayway JsonPath?或任何其他解决方案/建议将帮助很多。

如何从JSON字符串获取值的所有JSON路径列表?

我的目标是读取一个JSON文件并理解所有值的位置,这样当我遇到相同的JSON时,我可以轻松读取所有值。 我正在寻找一种方法,以Jayway JsonPath格式返回包含每个数据值的所有路径的列表。 示例JSON: { “shopper”: { “Id”: “4973860941232342”, “Context”: { “CollapseOrderItems”: false, “IsTest”: false } }, “SelfIdentifiersData”: { “SelfIdentifierData”: [ { “SelfIdentifierType”: { “SelfIdentifierType”: “111” } }, { “SelfIdentifierType”: { “SelfIdentifierType”: “2222” } } ] } } 理想情况下,我想将JSON作为字符串,并执行以下操作: String json = “{‘shopper’: {‘Id’: ‘4973860941232342’, ‘Context’: {‘CollapseOrderItems’: false, ‘IsTest’: false } }, ‘SelfIdentifiersData’: {‘SelfIdentifierData’: [{‘SelfIdentifierType’: […]

JSONPath在Java中的基本用法

我将JSON作为字符串,将JSONPath作为字符串。 我想用JSON路径查询JSON,将生成的JSON作为字符串。 我认为Jayway的json路径 是标准 。 但是, 在线API与您从Maven获得的实际库没有多大关系。 GrepCode的版本大致匹配。 看起来我应该能做到: String originalJson; //these are initialized to actual data String jsonPath; String queriedJson = JsonPath.read(originalJson, jsonPath); 问题是read根据JSONPath实际找到的read返回任何最合适的内容(例如List , String , double等),因此我的代码会抛出某些查询的exception。 假设有一些方法可以查询JSON并获取JSON,这似乎是合理的。 有什么建议么?