jsonnode转成jsonmap
时间: 2023-10-29 20:57:44 浏览: 124
要将 `JsonNode` 转换为 `JsonMap`,你可以使用 Jackson 库提供的 API。下面是一个示例代码:
```java
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
public class JsonUtils {
public static JsonMap convertToJsonMap(JsonNode jsonNode) {
JsonMap jsonMap = new JsonMap();
if (jsonNode.isObject()) {
Iterator<Entry<String, JsonNode>> fields = jsonNode.fields();
while (fields.hasNext()) {
Entry<String, JsonNode> field = fields.next();
jsonMap.put(field.getKey(), convertToJsonMap(field.getValue()));
}
} else if (jsonNode.isArray()) {
int index = 0;
for (JsonNode element : jsonNode) {
jsonMap.put(String.valueOf(index++), convertToJsonMap(element));
}
} else if (jsonNode.isValueNode()) {
jsonMap.put("value", jsonNode.asText());
}
return jsonMap;
}
public static void main(String[] args) throws Exception {
String jsonString = "{\"name\": \"John\", \"age\": 30, \"city\": \"New York\"}";
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(jsonString);
JsonMap jsonMap = convertToJsonMap(jsonNode);
System.out.println(jsonMap);
}
}
class JsonMap extends HashMap<String, Object> {
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("{");
for (Entry<String, Object> entry : entrySet()) {
sb.append("\"").append(entry.getKey()).append("\""); sb.append(": ");
Object value = entry.getValue();
if (value instanceof JsonMap) {
sb.append(value.toString());
} else {
sb.append("\"").append(value).append("\"");
}
sb.append(", ");
}
if (!isEmpty()) {
sb.setLength(sb.length() - 2);
}
sb.append("}");
return sb.toString();
}
}
```
以上代码将 `JsonNode` 对象转换为自定义的 `JsonMap` 对象,`JsonMap` 继承自 `HashMap<String, Object>`。你可以根据需要自定义 `JsonMap` 类的方法和字段。
在示例中,我们先将 `JsonNode` 对象转换为 `JsonMap` 对象,然后通过重写 `toString()` 方法将 `JsonMap` 转换为 JSON 字符串进行输出。
注意:为了运行示例代码,你需要将 Jackson 库添加到项目依赖中。你可以在 Maven 或 Gradle 中添加以下依赖:
Maven:
```xml
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.5</version>
</dependency>
</dependencies>
```
Gradle:
```groovy
dependencies {
implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.5'
}
```
希望能对你有所帮助!如有其他问题,请随时提问。
阅读全文