我有一个json格式的文件,有没有办法将其转换为XContentBuilder?
我想要做的是读取带有一些映射的文件,然后将其转换为XContentBuilder
就像是:
XContentBuilder builder = JsonXContent.contentBuilder().source(String json);
Run Code Online (Sandbox Code Playgroud)
Nik*_*Nik 10
通常情况下,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());
Run Code Online (Sandbox Code Playgroud)
你可能也可以做一些原始的东西,但我不认为这是值得的.
Pre 5.2你不需要这个NamedXContentRegistry.EMPTY,部分.
小智 5
这似乎为我工作:
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);
Run Code Online (Sandbox Code Playgroud)
Mei*_*ign -1
val x: XContentBuilder = XContentFactory.jsonBuilder().value("{\"bla\":\"blub\"}")
Run Code Online (Sandbox Code Playgroud)
不确定这是否回答了您的问题,因为您没有提供太多信息,但您也可以使用字符串将映射添加到 IndexRequestBuilder:
new CreateIndexRequestBuilder(adminclient)
.addMapping("typeName", "{\"mapping\" : \"mapping\"}")
Run Code Online (Sandbox Code Playgroud)
如果您确实想要并且需要从字符串创建 XContentBuilder 对象,您可以这样做:
String mapping = "{\"bla\":\"blub\"}"
XContentBuilder x = XContentFactory.jsonBuilder().value(mapping)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10432 次 |
| 最近记录: |