从Json String到XContentBuilder

时间:2015-05-29 14:08:53

标签: elasticsearch

我有一个json格式的文件,有没有办法将它转换为XContentBuilder?

我想要做的是读取带有一些映射的文件,然后将其转换为XContentBuilder

类似的东西:

XContentBuilder builder = JsonXContent.contentBuilder().source(String json);

3 个答案:

答案 0 :(得分:8)

通常,API应接受Stringbyte[],因此您不需要转换。也许你想要CreateIndexRequestBuilder#addMapping(String, String)

如果你真的,真的,真的想要XContentBuilder,你可以制作XContentParser并将内容复制到构建器。从Elasticsearch 5.2开始,应该这样做:

    String message = "{\"test\":\"test\"}";
    XContentBuilder b = XContentFactory.jsonBuilder().prettyPrint();
    try (XContentParser p = XContentFactory.xContent(XContentType.JSON).createParser(NamedXContentRegistry.EMPTY, message)) {
        b.copyCurrentStructure(p);
    }
    System.err.println(b.string());

您可能也可以使用raw ,但我认为这不值得。

Pre 5.2你不需要NamedXContentRegistry.EMPTY,部分。

答案 1 :(得分:4)

这似乎对我有用:

import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.common.xcontent.XContentType;

...

String message = "{\"bob\": \"test\"}";
XContentParser parser = XContentFactory.xContent(XContentType.JSON).createParser(message.getBytes();
parser.close();
XContentBuilder builder = jsonBuilder().copyCurrentStructure(parser);

答案 2 :(得分:-1)

val x: XContentBuilder = XContentFactory.jsonBuilder().value("{\"bla\":\"blub\"}")

不确定这是否会回答您的问题,因为您没有提供太多信息,但您也可以使用字符串向IndexRequestBuilder添加映射:

new CreateIndexRequestBuilder(adminclient)
  .addMapping("typeName", "{\"mapping\" : \"mapping\"}")

如果你真的想要并且需要从字符串创建一个XContentBuilder对象,你可以这样做:

String mapping = "{\"bla\":\"blub\"}"
XContentBuilder x = XContentFactory.jsonBuilder().value(mapping)