假设我有JSON如下。
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "users",
"_type": "students",
"_id": "AWAEqh945A0BWjveqnd0",
"_score": 1,
"_source": {
"college": {
"sport": {
"name": "cricket",
"category": "batsman"
}
}
}
}
]
}
}
我想将数据映射到从_source字段开始的College对象。
有没有办法对杰克逊或者Gson说从哪里开始绘图? 在这个例子中来自_source
我们从ES服务器获得的响应。 AWS上托管的ES服务器。 所以我们假设通过ES Java API RestClient进行通信。 是否可以通过ES Java API QueryBuilder查询。 什么是推荐。 ?
答案 0 :(得分:0)
您可以使用Gson执行以下操作:
JSONObject object = new JSONObject(s); // s is you String Json
JSONObject hits1 = object.getJSONObject("hits");
JSONArray hits = hits1.getJSONArray("hits");
for (Object jsonObj : hits) {
JSONObject json = (JSONObject) jsonObj;
JSONObject source = json.getJSONObject("_source");
College college = new Gson().fromJson(source.getJSONObject("college").toString(), College.class);
}
你还需要这两个Pojos:
public class College {
private Sport sport;
public College() {
}
public Sport getSport() {
return sport;
}
public void setSport(Sport sport) {
this.sport = sport;
}
}
public class Sport {
private String name;
private String category;
public Sport() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
}
答案 1 :(得分:0)
我用下面提到的方式。
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(resultJson);
String sourceString = jsonNode.at("/hits/hits/0/_source").toString();
College college = objectMapper.readValue(sourceString, College.class);