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

JSON到POJO:如何从唯一的JSON字段生成抽象java类名?,java,json,jackson,Java,Json,Jackson,我想使用给定的JSON模式生成Java类 使用WikimediaAPI,我从搜索中接收页面信息 JSON模式: (给我带来问题的那一小部分) 如您所见,352214字段是此搜索的唯一字段,使用POJO时会出现问题 我将Jackson2用作注释样式 波乔 导入java.util.HashMap; 导入java.util.Map; 导入com.fasterxml.jackson.annotation.JsonAnyGetter; 导入com.fasterxml.jackson.annotatio

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

使用WikimediaAPI,我从搜索中接收页面信息

JSON模式: (给我带来问题的那一小部分)

如您所见,
352214
字段是此搜索的唯一字段,使用POJO时会出现问题


我将Jackson2用作注释样式

波乔

导入java.util.HashMap;
导入java.util.Map;
导入com.fasterxml.jackson.annotation.JsonAnyGetter;
导入com.fasterxml.jackson.annotation.JsonAnySetter;
导入com.fasterxml.jackson.annotation.JsonIgnore;
导入com.fasterxml.jackson.annotation.JsonInclude;
导入com.fasterxml.jackson.annotation.JsonProperty;
导入com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
“页面ID”,
“ns”,
“头衔”,
“摘录”
})
公共类{
@JsonProperty(“页面ID”)
私有整数pageid;
@JsonProperty(“ns”)
私有整数ns;
@JsonProperty(“所有权”)
私有字符串标题;
@JsonProperty(“摘录”)
私有字符串提取;
@杰索尼奥雷
私有映射additionalProperties=new HashMap();
@JsonProperty(“页面ID”)
公共整数getPageid(){
返回pageid;
}
@JsonProperty(“页面ID”)
public void setPageid(整数pageid){
this.pageid=pageid;
}
@JsonProperty(“ns”)
公共整数getNs(){
返回ns;
}
@JsonProperty(“ns”)
公共无效集(整数ns){
这是1.ns=ns;
}
@JsonProperty(“所有权”)
公共字符串getTitle(){
返回标题;
}
@JsonProperty(“所有权”)
公共无效集合标题(字符串标题){
this.title=标题;
}
@JsonProperty(“摘录”)
公共字符串getExtract(){
回流提取物;
}
@JsonProperty(“摘录”)
公共void setExtract(字符串提取){
this.extract=提取;
}
@JsonAnyGetter
公共映射getAdditionalProperties(){
返回此。附加属性;
}
@JSONANYSETER
public void setAdditionalProperty(字符串名称、对象值){
this.additionalProperties.put(名称、值);
}
}

\u 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(); 
       }
}
public void parseWikiResponse(字符串wikiResponse){
JsonFactory JsonFactory=新的JsonFactory();
ObjectMapper mapper=新的ObjectMapper(jsonFactory);
JsonNode jsonNodes=mapper.readTree(wikiResponse);
迭代器fieldsIterator=jsonNodes.fields();
while(fieldsIterator.hasNext()){
Map.Entry field=fieldsIterator.next();
/*在这里,您可以使用regExp eg找到名称未知的字段*/
field.getKey();
}
}
如果您只想进行解析,那么这种方法应该可以解决这个问题

在这个话题上有一个类似的问题:

希望能有所帮助

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(); 
       }
}