具有不同节点的java JSON解析

具有不同节点的java JSON解析,java,json,Java,Json,我有一个有问题的json,其中节点是可变的(url定义节点),请参阅下面的“突出显示”部分-我正在尝试从突出显示节点获取url&fulltxt部分,如下所示-(目前为止未成功,请帮助) 是的,我使用了gson和jackson,但是不知怎么的,这些值没有被输入…我为bean创建的gson类是- public class SolrResultItem { public Response response; } class Response { public int numFound

我有一个有问题的json,其中节点是可变的(url定义节点),请参阅下面的“突出显示”部分-我正在尝试从突出显示节点获取url&fulltxt部分,如下所示-(目前为止未成功,请帮助)


是的,我使用了gson和jackson,但是不知怎么的,这些值没有被输入…我为bean创建的gson类是-

public class SolrResultItem {
    public Response response;
}

class Response {
    public int numFound;
    public int start;
    public List<Doc> docs;
    public List<Highlighting> highlightingDocs;
}

class Doc {
    public String urlFull;
    public String title;
    public String fulltxt;
    public String relatedItems;
}
class Highlighting {
    public String urlFull;
    public String title;
    //public List<String> title;
    public List<String> fulltxt;
}
公共类SolrResultItem{
公众反应;
}
班级反应{
公共int numFound;
公共int启动;
公开名单文件;
公共列表highlightingDocs;
}
类文件{
公共字符串已满;
公共字符串标题;
公共字符串fulltxt;
公共字符串相关项;
}
类突出显示{
公共字符串已满;
公共字符串标题;
//公开名单名称;
公开名单全文;
}

使用jackson,您可以将“突出显示”属性映射到地图

编辑:看到你的代码后,我将对你的类进行以下更正,以便与jackson一起使用它们:

public class SolrResultItem {
    public ResponseHeader responseHeader;
    public Response response;
    public Map<String,Fulltxt> highlighting;
    public Spellcheck spellcheck;
}

class ResponseHeader{
  public int status;
  public int QTime;//notation discouraged
  public Map<String,String> params;
}

class Response {
    public int numFound;
    public int start;
    public List<Doc> docs;
    public List<Highlighting> highlightingDocs;
}

class Doc {
    public String urlFull;
}
class Fulltxt{
    public List<String> fulltxt;
}
注意,这段代码不是很干净,我们应该为upprecase属性使用私有属性、getter/setter和Jackson注释。
希望这能有所帮助,您可能对“Map String,Fulltxt”有一些问题,您的jackson objectMapper必须正确使用它。

您使用的是JSON解析器库,如底部的on?是的,我使用的是gson&jackson,但不知何故,这些值并没有出现……我为bean创建的gson类是——正如在上面的文章中所添加的——实际上,默认情况下,任何JSON解析器都会将JSON映射到映射和列表的结构。一旦你有了这些,就很容易在结构中“导航”找到你想要的东西。你不需要为每件事定义一个类,如果你通过一个“漂亮的打印机”运行JSON,你会更容易知道你在做什么。这方面做得相当好。当您这样做时,您可以看到“突出显示”位于第一级“对象”(Map)中,包含11个元素,每个元素本身就是一个映射,由URL键标识。这些内部映射每个只包含一个键为“fulltxt”的元素,其值为“array”(列表),包含字符串元素。您能给我一个示例代码吗?因为我没能做到这一点?
public class SolrResultItem {
    public ResponseHeader responseHeader;
    public Response response;
    public Map<String,Fulltxt> highlighting;
    public Spellcheck spellcheck;
}

class ResponseHeader{
  public int status;
  public int QTime;//notation discouraged
  public Map<String,String> params;
}

class Response {
    public int numFound;
    public int start;
    public List<Doc> docs;
    public List<Highlighting> highlightingDocs;
}

class Doc {
    public String urlFull;
}
class Fulltxt{
    public List<String> fulltxt;
}
String s=yourjson;
Type type=SolrResultItem.class;
ObjectMapper objectMapper = new ObjectMapper();
JavaType javaType = objectMapper.getTypeFactory().constructType(type);
objectMapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);
SolrResultItem result = objectMapper.readValue(s, javaType);