jsonpatch json多层嵌套 判断key 值是否存在
时间: 2023-08-12 17:22:31 浏览: 170
Python判断是否json是否包含一个key的方法
在 JSON 中判断一个 key 是否存在可以通过以下方式:
假设有以下 JSON 对象:
```json
{
"name": "John",
"age": 30,
"address": {
"city": "New York",
"country": "USA"
},
"hobbies": [
"reading",
"traveling"
]
}
```
可以使用以下 Java 代码判断 `name` 和 `phone` 两个属性是否存在:
```java
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{...}"; // JSON 字符串
JsonNode jsonNode = mapper.readTree(jsonString);
// 判断 key 是否存在
boolean hasName = jsonNode.has("name");
boolean hasPhone = jsonNode.has("phone");
```
在进行 JSON Patch 操作时,可以使用 `has` 操作来判断一个 key 是否存在,例如:
```json
[
{ "op": "test", "path": "/address/city", "value": "New York" },
{ "op": "add", "path": "/phone", "value": "1234567890", "condition": { "op": "has", "path": "/name" } }
]
```
上面的 JSON Patch 操作中,当 `/name` 存在时才能执行添加 `/phone` 的操作。在执行时,可以先使用 `has` 操作来判断 `/name` 是否存在,例如:
```java
JsonNode patchNode = ...; // JSON Patch 操作
JsonNode rootNode = ...; // JSON 对象
for (JsonNode patchOpNode : patchNode) {
String op = patchOpNode.get("op").asText();
String path = patchOpNode.get("path").asText();
String value = patchOpNode.get("value").asText();
if (op.equals("add")) {
JsonNode conditionNode = patchOpNode.get("condition");
if (conditionNode != null) {
String conditionOp = conditionNode.get("op").asText();
String conditionPath = conditionNode.get("path").asText();
if (conditionOp.equals("has") && !rootNode.has(conditionPath)) {
// 如果 conditionPath 不存在,则不执行 add 操作
continue;
}
}
// 执行 add 操作
// ...
}
else if (op.equals("...")) {
// ...
}
// ...
}
```
在执行添加 `/phone` 的操作时,如果 `/name` 不存在,则不执行该操作。
阅读全文