我有一个json格式的文件,有没有办法将它转换为XContentBuilder?从Json字符串到XContentBuilder
我想要做的就是读取文件的一些映射,然后将其转换为XContentBuilder
喜欢的东西:
XContentBuilder builder = JsonXContent.contentBuilder().source(String json);
我有一个json格式的文件,有没有办法将它转换为XContentBuilder?从Json字符串到XContentBuilder
我想要做的就是读取文件的一些映射,然后将其转换为XContentBuilder
喜欢的东西:
XContentBuilder builder = JsonXContent.contentBuilder().source(String json);
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)
这似乎为我工作:
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);
通常的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());
你也许还做东西与原始,但我不认为这是值得的。
前5.2你不需要NamedXContentRegistry.EMPTY,
部分。
XContentFactory.jsonBuilder().value(mapping)不能按预期工作,因为我得到一个没有对象的根。我怀疑还是需要添加一个.startObject()? – tbo