使用Objectmapper JAVA解析JSON

时间:2013-11-29 08:48:09

标签: java json mapper

这是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);
}

它没有给我任何错误,只是一个空的结果arraylist ... 附:我在时间之间做了很多改变,对此给您带来的不便表示歉意

2 个答案:

答案 0 :(得分:2)

你必须创建一个符合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() {
    }
}

希望它有所帮助!

答案 1 :(得分:1)

我设法解决了这个问题。 我忘了为'd'班制作二传手和吸气鬼。

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