我有一个json格式的文件,有没有办法将它转换为XContentBuilder?
我想要做的是读取带有一些映射的文件,然后将其转换为XContentBuilder
类似的东西:
XContentBuilder builder = JsonXContent.contentBuilder().source(String json);
答案 0 :(得分:8)
通常,API应接受String
或byte[]
,因此您不需要转换。也许你想要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)