生成JSON文档

有下面几种方式生成一个JSON文档:

  • 手动使用byte[]String类型来拼接一个JSON

  • 使用Map类型会自动转换成等效的JSON

  • 使用第三方库(例如: Jackson)来把你的Bean转换成Json格式

  • 使用内置的 XContentFactory.jsonBuilder() 工具

在内部,所有类型都会转换成 byte[] 类型。因此,如果你的对象已经是这种格式了,那么就直接使用它吧。 当然 jsonBuilder 是一个高度优化的工具,你可以使用它来直接构造 byte[]

手动拼接

如果你使用过json格式,那么这里对你来说没什么困难的, 唯一需要注意的是你需要通过 Date Format 对日期进行格式化。

String json = "{" +
        "\"user\":\"kimchy\"," +
        "\"postDate\":\"2013-01-30\"," +
        "\"message\":\"trying out Elasticsearch\"" +
    "}";

使用Map

Map是一个键值对的集合,它可以表现为一个JSON结构:

Map<String, Object> json = new HashMap<String, Object>();
json.put("user","kimchy");
json.put("postDate",new Date());
json.put("message","trying out Elasticsearch");

使用第三方库

你可以使用 Jackson将你的Bean序列化成JSON。 请将 Jackson Databind加入你的项目中。 然后你就可以使用 ObjectMapper 来序列化你的Bean了:

import com.fasterxml.jackson.databind.*;

// instance a json mapper
ObjectMapper mapper = new ObjectMapper(); // create once, reuse

// generate json
byte[] json = mapper.writeValueAsBytes(yourbeaninstance);

使用ES内置的工具

ES提供了一个内置的工具来帮助你生成JSON内容:

import static org.elasticsearch.common.xcontent.XContentFactory.*;

XContentBuilder builder = jsonBuilder()
    .startObject()
        .field("user", "kimchy")
        .field("postDate", new Date())
        .field("message", "trying out Elasticsearch")
    .endObject()

这里需要注意,你也可以使用 startArray(String) / endArray() 方法代替 startObject() / endObject() 方法来添加一个数组。 顺便说一下,field 可以接受很多对象类型。你可以直接传一个numberdate 或者是其它 XContentBuilder 类型的对象。

如果你想查看生成的JSON内容,你可以使用 string() 方法:

String json = builder.string();