JSON 到 POJO:如何从唯一的 JSON 字段生成抽象的 Java 类名?



我想使用给定的JSON模式生成Java类

使用维基媒体API,我从搜索中收到页面信息

JSON架构:

(给我带来问题的一小部分(

"pages": {
"352214": {
"pageid": 352214,
"ns": 0,
"title": "Montellano",
"extract": "Montellano es un municipio español..."
}
}

如您所见,352214字段是此搜索所独有的,这在使用 POJO 时会出现问题。


我正在使用 jsonschema2pojo 和 Jackson2 作为注释样式

波乔


import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"pageid",
"ns",
"title",
"extract"
})
public class _352214 {
@JsonProperty("pageid")
private Integer pageid;
@JsonProperty("ns")
private Integer ns;
@JsonProperty("title")
private String title;
@JsonProperty("extract")
private String extract;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
@JsonProperty("pageid")
public Integer getPageid() {
return pageid;
}
@JsonProperty("pageid")
public void setPageid(Integer pageid) {
this.pageid = pageid;
}
@JsonProperty("ns")
public Integer getNs() {
return ns;
}
@JsonProperty("ns")
public void setNs(Integer ns) {
this.ns = ns;
}
@JsonProperty("title")
public String getTitle() {
return title;
}
@JsonProperty("title")
public void setTitle(String title) {
this.title = title;
}
@JsonProperty("extract")
public String getExtract() {
return extract;
}
@JsonProperty("extract")
public void setExtract(String extract) {
this.extract = extract;
}
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}

_352214类仅适用于具有相同字段名称的 wiki 搜索,每当我进行另一次搜索并且此字段更改时,它都会崩溃。我该如何解决这个问题?

没有标准方法来解析这样的情况(当您不知道字段名称的情况(。作为一个选项,您可以使用 Jackson 手动解析文件:

public void parseWikiResponse(String wikiResponse)  {
JsonFactory jsonFactory = new JsonFactory();
ObjectMapper mapper = new ObjectMapper(jsonFactory);
JsonNode jsonNodes = mapper.readTree(wikiResponse);  
Iterator<Map.Entry<String,JsonNode>> fieldsIterator = jsonNodes.fields();
while (fieldsIterator.hasNext()) {
Map.Entry<String,JsonNode> field = fieldsIterator.next();
/* Here you can find your field with unknown name using regExp eg */
field.getKey(); 
}
}

如果你只想解析这种方法应该可以解决问题。

关于这个话题有一个类似的问题:

在不知道 JSON 格式的情况下在 Java 中解析 JSON

希望有什么帮助(:

最新更新