JsonWriter writer value 方法报错 java.lang.IllegalStateException: JSON must have only one top-level value
时间: 2024-10-25 21:08:26 浏览: 26
这个错误提示 "JSON must have only one top-level value" 是因为在使用 Java 的 JSON 库(如 Jackson、Gson 或者其他类似的库)时,你在尝试写入 JSON 文档时没有正确地设置顶级的 JSON 对象或数组。
`JsonWriter` 类通常用于逐个添加元素到 JSON 输出,而 `value()` 方法是用来添加一个具体的值。如果你试图在一个 JSON 文档中添加多个独立的顶级值(比如两个键值对),你需要先创建一个对象(通常是 Map 或者自定义类实例)来包含这些值,然后将整个对象传递给 `writer.value()`。
例如,正确的做法是:
```java
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> jsonRoot = new HashMap<>();
jsonRoot.put("key1", "value1");
jsonRoot.put("key2", "value2");
try (JsonWriter writer = mapper.writer()) {
writer.beginObject(); // 开始 JSON 对象
writer.writeObject(jsonRoot); // 添加顶级值
writer.endObject(); // 结束 JSON 对象
String jsonString = writer.toString();
} catch (IOException e) {
e.printStackTrace();
}
```
如果你直接写了多个 `value()`,比如 `writer.value("key1", "value1").value("key2", "value2")`,这就会导致 `IllegalStateException`,因为Jackson期望的是一个有序的键值对列表,而不是多个独立的值。
阅读全文