Vert.x学习(三)—— WebSocket、数据共享、流式传输、Record Parser
JsonParser parser = JsonParser.newParser();
parser.handler(event -> {
switch (event.type()) {
case START_ARRAY:
log.info("[");
break;
case START_OBJECT:
log.info("{");
// 切换到 value-mode: 后续 VALUE 事件中直接返回字段的完整嵌套对象/数组值 (JsonObject/JsonArray),
// 并跳过这些嵌套结构内部的 START/END/VALUE 事件。适用于直接提取嵌套体。
parser.objectValueMode();
break;
//每处理一个字段,都会触发该事件
case VALUE:
//直接提前整个JSON对象
if(event.fieldName().equals("address")){
Address address = event.mapTo(Address.class);
log.info(address);
}
log.info(event.fieldName() + ":"+ event.value());
break;
case END_OBJECT:
log.info("}");
// 设置为 event-mode,所以解析器重新触发 start-end 事件,如果在之前的事件中设置过objectValueMode,则必须调用
parser.objectEventMode();
break;
case END_ARRAY:
log.info("]");
break;
}
});
Buffer jsonBuffer = Buffer.buffer(
"[" +
"{" +
"\"firstName\": \"Bob\"," +
//嵌套对象Address
"\"address\": {" +
"\"city\": \"Paris\"," +
"\"country\": \"France\"" +
"}" +
"}," +
"{" +
"\"firstName\": \"Luke\"," +
"\"address\": {" +
"\"city\": \"Daisy Town\"," +
"\"country\": \"USA\"" +
"}" +
"}" +
"]"
);
parser.handle(jsonBuffer);
parser.end();