我有一個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