【问题标题】:JSON parse with Objectmapper JAVA使用 Objectmapper JAVA 解析 JSON
【发布时间】:2013-11-29 08:48:08
【问题描述】:

这是 JSON 字符串:

{
   "d":{
      "results":[
         {
            "__metadata":{
               "uri":"http://blabla1",
               "type":"type1"
            },
            "Synonym":"miami"
         },
         {
            "__metadata":{
               "uri":"http://blabla2",
               "type":"type2"
            },
            "Synonym":"florida"
         }
      ]
   }
}

这是代码:

public class Test{        
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class d {
        public List<Results> results;
        public d() {
            results = new ArrayList<Results>();
        }
        public static class Results {
            public Metadata __metadata;
            public String Synonym;
            public Results() {}
        }
        public static class Metadata {
            public String uri;
            public String type;
            public Metadata() {}
        }
    }
}

使用以下映射器:

ObjectMapper mapper = new ObjectMapper();
Test.d readValue = mapper.readValue(jsonString, Test.d.class);
for (Test.d.Results k : readValue.results) {
    System.out.println("synonym: "+k.Synonym);
}

它没有给我任何错误,只是一个空的结果数组列表...... p.s.这段时间我做了很多改动,给您带来的不便敬请谅解

【问题讨论】:

  • 你有没有尝试过?请包含您目前拥有的代码。

标签: java json mapper


【解决方案1】:

您必须创建一个符合 json 答案的对象,如下所示(未测试):

class d {

    public List<Results> results;

    public d() {
    }
}

class Results {

    public Metadata metadata;
    public String synonym;

    public Results() {
    }
}

class Metadata {

    public String uri;
    public String type;


    public Metadata() {
    }
}

希望对你有帮助!

【讨论】:

  • 可能是什么问题?您的代码似乎是正确的,但它没有给我任何结果
  • 正如我在您编辑的答案中看到的那样,您不尊重您的响应的 jSon heiachy。 d 对象只有一个结果列表,并且您已放入其他类。尝试完全按照我的做法,使用 3 个不同的类,其他类中没有。
  • 它说:“org.codehaus.jackson.map.exc.UnrecognizedPropertyException:无法识别的字段“d”(d类),未标记为可忽略”-如果我输入“@JsonIgnoreProperties(ignoreUnknown = true )" 它运行没有错误,但是当我想读取结果的内容时,它崩溃了(空指针异常)
【解决方案2】:

我已经设法解决了。 我忘了为“d”类制作 setter 和 getter。

public class Test {
    private d d;
    public d getD() {return d;}
    public void setD(d d) {this.d = d;}    
    public static class d{
        private List<Results> results;
        public List<Results> getResults() {return results;}
        public void setResults(List<Results> results) {this.results = results;}
    }
    public static class Results {
        public Metadata __metadata;
        public String Synonym;
    }
    public static class Metadata {
        private String uri;
        private String type;
        public String getUri() {return uri;}
        public void setUri(String uri) {this.uri = uri;}
        public String getType() {return type;}
        public void setType(String type) {this.type = type;}
    }
}

这是地图:

Test test = mapper.readValue(json, KeyPhrase.class);
    System.out.println("cp");

    for(Test.Results res : test.getD().getResults()){
        System.out.println(res.Synonym);
}

【讨论】:

  • 太棒了!希望我的回答对你有所帮助!
  • 是的,它让我对映射的工作原理有了更深入的了解!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
相关资源
最近更新 更多