2015-05-20 4 views
0

У меня есть следующий json.свойство объекта jackson в примитиве

{ 
    foo:{ 
     id:1 
    }, 
    name:'Albert', 
    age: 32 
} 

Как десериализации в Java Pojo

public class User { 
    private int fooId; 
    private String name; 
    private int age; 
} 
+1

возможно дубликат [Как использовать Джексон deserialise массива объектов] (HTTP://stackoverflow.com/questions/6349421/how-to-use-jackson-to-deserialise-an-array-of-objects) – BatScream

+1

@BatScream Здесь нет массива, я считаю, что проблема пришла s из того факта, что в json id вложен в объект foo, для которого нет POJO. – azurefrog

+0

Не имеет ничего общего с @JsonProperty ("foo.id")? –

ответ

0

Это то, что вам нужно десериализации, используя JsonProperty аннотаций в конструкторе.

import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.databind.JsonNode; 
import com.fasterxml.jackson.databind.ObjectMapper; 

import java.io.IOException; 

public class User { 

    private int fooId; 
    private String name; 
    private int age; 

    public int getFooId() { 
     return fooId; 
    } 

    public String getName() { 
     return name; 
    } 

    public int getAge() { 
     return age; 
    } 

    public User(@JsonProperty("age") Integer age, @JsonProperty("name") String name, 
       @JsonProperty("foo") JsonNode foo) { 
     this.age = age; 
     this.name = name; 
     this.fooId = foo.path("id").asInt(); 
    } 

    public static void main(String[] args) { 

     ObjectMapper objectMapper = new ObjectMapper(); 

     String json = "{\"foo\":{\"id\":1}, \"name\":\"Albert\", \"age\": 32}" ; 
     try { 
      User user = objectMapper.readValue(json, User.class); 

      System.out.print("User fooId: " + user.getFooId()); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 
} 

Выход:

User fooId: 1

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

Хосе Луис

0

Вы можете выполнить одно из следующих действий:

  • Создать конкретный тип, представляющий Foo:

    public class Foo { 
        private int id; 
    
        ... 
    } 
    

    Th еп в User вы бы:

    public class User { 
        private Foo foo; 
    
        ... 
    } 
    
  • Используйте Map<String, Integer>:

    public class User { 
        private Map<String, Integer> foo; 
    
        ... 
    } 
    

Если другие абоненты действительно ждет вас, чтобы иметь getFooId и setFooId, вы можете предоставить эти методы а затем либо делегировать Foo, либо Map в зависимости от выбранного вами варианта. Просто убедитесь, что вы комментируете их с помощью @JsonIgnore, так как они не являются реальными свойствами.

-1

Вы можете использовать очень полезный gson google API.

Прежде всего, создать эти два класса: класс

пользователя: класс

public class User{ 
    Foo foo; 
    String name; 
    int age; 
    //getters and setters 
} 

Foo:

public class Foo{ 
    int id; 
    //getters and setters 
} 

Если у вас есть example.json файл затем десериализации его как следует

Gson gson = new Gson(); 
User data = gson.fromJson(new BufferedReader(new FileReader(
     "example.json")), new TypeToken<User>() { 
}.getType()); 

Если у вас есть exampleJson String, то десериализации как следовать

Gson gson = new Gson(); 
User data = gson.fromJson(exampleJson, User.class); 
+0

Mr downvoter, любые комментарии? – MChaker

Смежные вопросы