vertx中的json

JSON

和其他一些语言不同,Java 没有对 JSON 的原生支持(first class support),因此我们提供了两个类,以便在 Vert.x 应用中处理 JSON 更容易。

JSON 对象

JsonObject 类用来描述JSON对象。

一个JSON 对象基本上只是一个 Map 结构。它具有字符串的键,值可以是任意一种JSON 支持的类型(如 string, number, boolean)。

JSON 对象也支持 null 值。

创建 JSON 对象

可以使用默认构造函数创建空的JSON对象。

您可以通过一个 JSON 格式的字符串创建JSON对象:

1
2
String jsonString = "{\"foo\":\"bar\"}";
JsonObject object = new JsonObject(jsonString);

您可以从通过一个Map创建JSON对象:

1
2
3
4
Map<String, Object> map = new HashMap<>();
map.put("foo", "bar");
map.put("xyz", 3);
JsonObject object = new JsonObject(map);

将键值对放入 JSON 对象

使用put 方法可以将值放入到JSON对象里。

这个API是流式的,因此这个方法可以被链式地调用。

1
2
JsonObject object = new JsonObject();
object.put("foo", "bar").put("num", 123).put("mybool", true);

从 JSON 对象获取值

您可使用 getXXX 方法从JSON对象中获取值。例如:

1
2
String val = jsonObject.getString("some-key");
int intVal = jsonObject.getInteger("some-other-key");

JSON 对象和 Java 对象间的映射

您可以从 Java 对象的字段创建一个JSON 对象,如下所示:

你可以通过一个JSON 对象来实例化一个Java 对象并填充字段值。如下所示:

1
2
3
4
request.bodyHandler(buff -> {
JsonObject jsonObject = buff.toJsonObject();
User javaObject = jsonObject.mapTo(User.class);
});

请注意上述代码直接使用了 Jackson 的 ObjectMapper#convertValue() 来执行映射。关于字段和构造函数的可见性的影响、对象引用的序列化和反序列化的问题等等可参考 Jackson 的文档获取更多信息。

在最简单的情况下,如果 Java 类中所有的字段都是 public(或者有 public 的 getter/setter)时,并且有一个 public 的默认构造函数(或不定义构造函数),mapFrom 和 mapTo 都应该成功。

只要不存在对象的循环引用,嵌套的 Java 对象可以被序列化/反序列化为嵌套的JSON对象。

将 JSON 对象编码成字符串

您可使用encode方法将一个对象编码成字符串格式。

译者注:如要得到更优美、格式化的字符串,可以使用encodePrettily方法。

JSON 数组

JsonArray类用来描述 JSON数组。

一个JSON 数组是一个值的序列(值的类型可以是 string、number、boolean 等)。

JSON 数组同样可以包含 null 值。

创建 JSON 数组

可以使用默认构造函数创建空的JSON数组。

您可以从JSON格式的字符串创建一个JSON数组:

1
2
String jsonString = "[\"foo\",\"bar\"]";
JsonArray array = new JsonArray(jsonString);

将数组项添加到JSON数组

您可以使用 add 方法添加数组项到JSON数组中:

1
2
JsonArray array = new JsonArray();
array.add("foo").add(123).add(false);

从 JSON 数组中获取值

您可使用getXXX方法从JSON 数组中获取值。例如:

1
2
3
String val = array.getString(0);
Integer intVal = array.getInteger(1);
Boolean boolVal = array.getBoolean(2);

将 JSON 数组编码成字符串

您可使用encode将一个JsonArray编码成字符串格式。

文章目录
  1. 1. JSON
  2. 2. JSON 对象
  3. 3. 创建 JSON 对象
  4. 4. 将键值对放入 JSON 对象
  5. 5. 从 JSON 对象获取值
  6. 6. JSON 对象和 Java 对象间的映射
  7. 7. 将 JSON 对象编码成字符串
  8. 8. JSON 数组
  9. 9. 创建 JSON 数组
  10. 10. 将数组项添加到JSON数组
  11. 11. 从 JSON 数组中获取值
  12. 12. 将 JSON 数组编码成字符串
|