2013-10-01 2 views
1

Я следующий данные JSonJson преобразование объекта в объект Java с помощью Джексона

{"id":10606, 
"name":"ProgrammerTitle", 
"objectMap":{"programme-title":"TestProgramme","working-title":"TestProgramme"} 
} 

Я хочу, чтобы установить эти данные в мой Pojo объект

public class TestObject { 
    private Long id; 
    private String name; 

    @JsonProperty("programme-title") 
    private String programmeTitle; 

    @JsonProperty("working-title") 
    private String workingTitle; 
} 

Здесь я нахожусь в состоянии установить идентификатор и имя мой тестовый объект, но для карты объекта я не могу установить данные.

Так что я сделал на более класс для ObjectMap, который содержит programmeTitle & workingTitle это работает нормально, но я не могу установить эти поля непосредственно на мой объект pojo это можно установить?

Я использую Jackson Object Mapper для преобразования данных json.

Это работает отлично, если я создать еще один объект Java в моем POJO как:

public class TestObject { 
private Long id; 
private String name; 

@JsonProperty("objectMap") 
private ObjectMap objectMap; 

public Long getId() { 
    return id; 
} 

public void setId(Long id) { 
    this.id = id; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public ObjectMap getObjectMap() { 
    return objectMap; 
} 

public void setObjectMap(ObjectMap objectMap) { 
    this.objectMap = objectMap; 
} 

}

public class ObjectMap { 

@JsonProperty("programme-title") 
private String programmeTitle; 

@JsonProperty("working-title") 
private String workingTitle; 

public String getProgrammeTitle() { 
    return programmeTitle; 
} 

public void setProgrammeTitle(String programmeTitle) { 
    this.programmeTitle = programmeTitle; 
} 

public String getWorkingTitle() { 
    return workingTitle; 
} 

public void setWorkingTitle(String workingTitle) { 
    this.workingTitle = workingTitle; 
} 

}

+0

проверить эту ссылку http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/ – swan

+1

Ваш объект json и Java POJO не совпадают. 'TestObject-> program-title' не такой, как' Obj-> objectMap-> program-title' –

+0

Привет, я проверил сообщение, которое я получил, но я хочу использовать объект json, который внутри этого объекта, это возможно? – hemali

ответ

2

Если JSON, как это

{"id":10606, 
    "name":"ProgrammerTitle", 
    "objectMap":{"programme-title":"TestProgramme","working-title":"TestProgramme"} 
} 

тогда вы ma у написать свой класс объекта картографа, как это ..

public class Program{ 

    public static class ObjectMap{ 
    private String programme_title, working_title; 

     public String getprogramme_title() { return programme_title; } 
    public String getworking_title() { return working_title; } 

    public void setprogramme_title(String s) { programme_title= s; } 
    public void setworking_title(String s) { working_title= s; } 
    } 

    private ObjectMap objMap; 

    private String name; 

    public ObjectMap getobjectMap() { return objMap; } 
    public void setObjectMap (ObjectMap n) { objMap= n; } 

    private Long id; 
    public Long getId() {return id;} 
    public void setId(Long id) {this.id = id;} 

    private String name; 
    public String getName() {return name;} 
    public void setName(String name) {this.name = name;} 
    } 

смотрите этот check it

+0

привет, я хочу установить programmeTitle напрямую, который находится внутри TestObject.I не хочу используйте другую ObjectMap внутри TestObject. – hemali

1

Вы можете написать свой собственный десериализатор для этого класса:

class EntityJsonDeserializer extends JsonDeserializer<Entity> { 

    @Override 
    public Entity deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { 
     Root root = jp.readValueAs(Root.class); 

     Entity entity = new Entity(); 
     entity.setId(root.id); 
     entity.setName(root.name); 
     if (root.objectMap != null) { 
      entity.setProgrammeTitle(root.objectMap.programmeTitle); 
      entity.setWorkingTitle(root.objectMap.workingTitle); 
     } 

     return entity; 
    } 

    private static class Root { 
     public Long id; 
     public String name; 
     public Title objectMap; 
    } 

    private static class Title { 
     @JsonProperty("programme-title") 
     public String programmeTitle; 

     @JsonProperty("working-title") 
     public String workingTitle; 
    } 
} 

Ваше лицо:

@JsonDeserialize(using = EntityJsonDeserializer.class) 
class Entity { 

    private Long id; 
    private String name; 
    private String programmeTitle; 
    private String workingTitle; 

    //getters, setters, toString 
} 

И пример использования:

import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.core.JsonParser; 
import com.fasterxml.jackson.core.JsonProcessingException; 
import com.fasterxml.jackson.databind.DeserializationContext; 
import com.fasterxml.jackson.databind.JsonDeserializer; 
import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.databind.annotation.JsonDeserialize; 

public class JacksonProgram { 

    public static void main(String[] args) throws IOException { 
     ObjectMapper mapper = new ObjectMapper(); 
     Entity entity = mapper.readValue(jsonString, Entity.class); 
     System.out.println(entity); 
    } 
} 

Над программа печатает:

Entity [id=10606, name=ProgrammerTitle, programmeTitle=TestProgramme, workingTitle=TestProgramme] 
Смежные вопросы