Статьи

Обработка Java JSON с Джексоном

JSON (Javascript Object Notation) становится очень популярным форматом обмена данными. При разработке веб-приложений с использованием таких сред Javascript, как YUI, ExtJS, DOJO и т. Д., Мы можем использовать либо XML, либо JSON для обмена данными между клиентом и сервером. Обычно мы получаем ответ от сервера в терминах Java-объектов. Затем в классах Servlets или Action нам нужно собрать JSON из объектов и отправить обратно клиенту. Для построения ответа JSON из Java-объекта мы можем использовать JSON-процессор Jackson Java, который очень прост в использовании.

Давайте посмотрим, как мы можем использовать 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 Сивы Прасад Редди .

Статьи по Теме: