当把JSON library 从 org.json 改为 Jackson 时,我希望用 Jackson 重现下面这段代码:
JSONObject datasets = readJSON(new URL(DATASETS));
JSONArray datasetArray = datasets.getJSONArray("datasets");
但是 Jackson 中的 JsonNode.get(field) 方法返回的还是一个 JsonNode,但是 datasets 实际上是个 [{...},{...}...] 这样的json数组呀,那么应该怎么写呢?
实际上,
JsonNode
已经具备了很多 array node的特性,因此并不需要映射到
ArrayNode
使用
。
下面是一个例子:
JSON:
"objects" : ["One", "Two", "Three"]
Code:
String json = "{\"objects\" : [\"One\", \"Two\", \"Three\"]}";
JsonNode arrNode = new ObjectMapper().readTree(json).get("objects");
if (arrNode.isArray()) {
for (JsonNode objNode : arrNode) {
System.out.println(objNode);
Output:
"One"
"Two"
"Three"
isArray
方法能够判断该 node 是否是一个 array。如果你很确信这个 node 是个数组的话,其实不做这一步检查,也是可以。
当把JSON library 从 org.json 改为 Jackson 时,我希望用 Jackson 重现下面这段代码:JSONObject datasets = readJSON(new URL(DATASETS));JSONArray datasetArray = datasets.getJSONArray("datasets");但是 Jackson 中的 JsonNode.get(f...
一.json、jsonNode、jsonObject的区别
1.json是一个字符串。
2.jsonNode是一个对象,jsonNode中都是键值对形式,可以根据Key取出对应的值!
3.jsonObject是一个对象。
二.JsonNode
项目中用到的jar包
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.
Jackson中的JsonNode,ObjectNode,ArrayNode使用和区别一、前言1. JsonNode作用2. JsonNode VS ObjectNode二、只读的JsonNode1. 测试用的JSON文本2. JSON 和 JsonNode 相互转换3. 使用get方法取值4. 使用path方法取值5. 使用at方法取值三、可修改的ObjectNode四、可修改的ArrayNode
若你的项目里使用Jackson处理JSON,必然会看到很多JsonNode、ObjectNode和
JSONObject result = jsonObject.getJSONObject("result");
Object obj = result.get("detail");
if (obj instanceof JSONArray) {
logger.info("jsonarray");
} else if (obj instanceof JSONObject) .
import com.fasterxml.jackson.databind.JsonNode;
import com.iot.north.app.demo.recieve.service.EventService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.Post
在 Jackson 中,判断一个 `JsonNode` 是否为空值可以使用 `JsonNode` 类的 `isNull()` 和 `isMissingNode()` 方法。
- `isNull()` 方法用于检查一个节点是否为 `null`,如果是则返回 `true`。
- `isMissingNode()` 方法用于检查一个节点是否不存在,如果是则返回 `true`。
下面是一个使用示例:
```java
JsonNode node = ... // 从 JSON 字符串中解析出的 JsonNode 对象
if (node.isNull() || node.isMissingNode()) {
// 处理节点为空的情况
} else {
// 处理节点非空的情况
需要注意的是,如果一个节点的值为 JSON 数组或对象,那么它即使是空的也不会被视为空节点。如果需要检查一个节点是否为空数组或空对象,可以使用 `isEmpty()` 方法。例如:
```java
JsonNode node = ... // 从 JSON 字符串中解析出的 JsonNode 对象
if (node.isNull() || node.isMissingNode() || node.isEmpty()) {
// 处理节点为空的情况,包括空数组和空对象
} else {
// 处理节点非空的情况