2013-11-29 6 views
1

Это строка JSON:JSON синтаксического анализа с ObjectMapper JAVA

{ 
    "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 результатов ... ps я сделал много изменений между временем, извините за неудобства

+2

Пытались ли вы что-нибудь? Пожалуйста, укажите код, который у вас есть. –

ответ

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

Отлично! Надеюсь, что мой ответ помог вам! –

+0

Да, это дало мне больше понимания того, как работает картирование! спасибо – user1275645

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

Надеется, что это помогает!

+0

В чем может быть проблема? ваш код кажется правильным, но он не дает мне результата – user1275645

+1

Как я вижу в вашем отредактированном ответе, вы не уважаете jiaon heriachy своего ответа. Объект d имеет только список результатов, и вы добавили в другие классы. Попытайтесь сделать то, что я сделал, используя 3 разных класса, а другие внутри других. –

+0

: «org.codehaus.jackson.map.exc.UnrecognizedPropertyException: нераспознанное поле« d »(класс d), не помеченное как невежественное» - Если я помещаю «@JsonIgnoreProperties (ignoreUnknown = true)», он запускается без ошибка, но когда я хочу прочитать содержимое результатов, он сработает (исключение nullpointer) – user1275645