Давайте посмотрим, как мы можем использовать JSON-процессор Jackson Java для преобразования Java-объекта в JSON и наоборот. Мы можем скачать jackson-all-1.6.4.jar со страницы загрузки Jackson .
Ключевым классом, который выполняет маршалинг и демаршаллинг, является org.codehaus.jackson.map.ObjectMapper .
Давайте создадим пользовательский Java-бин следующим образом:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
package com.sivalabs.json; import java.util.Date; public class User { private String userId; private UserName userName; private Date dob; @Override public String toString(){ return "User [dob=" + dob + ", userId=" + userId + ", userName=" + userName + "]" ; } //setters and getters } |
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
package com.sivalabs.json; public class UserName { private String firstname; private String middlename; private String lastname; @Override public String toString() { return "UserName [firstname=" + firstname + ", lastname=" + lastname+ ", middlename=" + middlename + "]" ; } //setters and getters } |
Теперь давайте создадим экземпляр User и добавим его в JSON:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
ObjectMapper mapper = new ObjectMapper(); UserName userName = new UserName(); userName.setFirstname( "Katamreddy" ); userName.setMiddlename( "Siva" ); userName.setLastname( "PrasadReddy" ); User user = new User(); user.setUserId( "1" ); user.setUserName(userName); user.setDob( new Date()); Writer strWriter = new StringWriter(); mapper.writeValue(strWriter, user); String userDataJSON = strWriter.toString(); System.out.println(userDataJSON); |
Это распечатает данные пользователя в формате JSON как:
{
«Идентификатор пользователя»:»1″,
«Username»:
{
«Имя»:»Katamreddy»,
«MiddleName»:»Сива»,
«Фамилия»:»PrasadReddy»
},
«Д.р.»: 1300878089906
}
Теперь давайте удалим следующие пользовательские данные в формате json в User Object:
{
«Идентификатор пользователя»:»100″,
«Username»:
{
«Имя»:»К»,
«MiddleName»:»Сива»,
«Фамилия»:»Прасад»
},
«Д.р.»: 1300878089906
}
1
2
3
4
5
|
String userDataJSON = "{\"userId\":\"100\",\"userName\":{\"firstname\":\"K\"" + ",\"middlename\":\"Siva\",\"lastname\":\"Prasad\"},\"dob\":1300878089906}" ; User userFromJSON = mapper.readValue(userDataJSON, User. class ); System.out.println(userFromJSON); |
Это напечатает объект User как:
Пользователь [dob = Ср 23 марта 16:31:29 IST 2011, userId = 100, userName = UserName [имя = K, фамилия = Prasad, middlename = Siva]]
Значение Date маршалируется как Timestamp, что является поведением по умолчанию. Если вы хотите, вы можете изменить DateFormat следующим образом:
1
2
3
4
5
6
|
DateFormat dateFormat = new SimpleDateFormat( "MM-dd-yyyy" ); SerializationConfig serConfig = mapper.getSerializationConfig(); serConfig.setDateFormat(dateFormat); DeserializationConfig deserializationConfig = mapper.getDeserializationConfig(); deserializationConfig.setDateFormat(dateFormat); mapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false ); |
Тогда пользователь JSON будет:
{
«Идентификатор пользователя»:»1″,»Username»:
{
«Имя»:»Katamreddy»,
«MiddleName»:»Сива»,
«Фамилия»:»PrasadReddy»
},
«Д.р.»:»03-23-2011″
}
Мы также можем маршалировать Java-объект как json в файл как:
1
|
mapper.writeValue( new File( "user.json" ), user); |
Это создаст файл user.json как:
{
«Идентификатор пользователя»:»100″,
«Username»:
{
«Имя»:»К»,
«MiddleName»:»Сива»,
«Фамилия»:»Прасад»
},
«Д.р.»: 1300878089906
}
Мы можем построить объект User из user, json как:
1
|
User user = mapper.readValue( new File( "user.json" ), User. class ); |
Справка: обработка JSON с использованием JSON-процессора Jackson Java от нашего партнера по JCG Сивы Прасад Редди .
Статьи по Теме: