Vert.x学习之json

来源:互联网 发布:天地诸神光翼进阶数据 编辑:程序博客网 时间:2024/06/05 07:31

JSON

在java语言中,java并没有对json提供原生的支持。但在Vert.x中有两个类提供这样的支持。

JSON 对象

JsonObject类用来描述JSON对象。

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

JSON 对象也支持 null 值。

创建 JSON 对象

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

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

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

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

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

将键值对放入 JSON 对象

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

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

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

从 JSON 对象获取值

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

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

JSON 对象和 Java 对象间的映射

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

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

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

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

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

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

 

将 JSON 对象编码成字符串

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


JSON 数组

JsonArray 类用来描述 JSON数组。

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

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

创建 JSON 数组

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

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

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

将数组项添加到JSON数组

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

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

从 JSON 数组中获取值

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

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

将 JSON 数组编码成字符串

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




原创粉丝点击