Преобразование объектов Java в JSON с Джексоном
Я хочу, чтобы мой JSON выглядел так:
{
"information": [{
"timestamp": "xxxx",
"feature": "xxxx",
"ean": 1234,
"data": "xxxx"
}, {
"timestamp": "yyy",
"feature": "yyy",
"ean": 12345,
"data": "yyy"
}]
}
Код до сих пор:
import java.util.List;
public class ValueData {
private List<ValueItems> information;
public ValueData(){
}
public List<ValueItems> getInformation() {
return information;
}
public void setInformation(List<ValueItems> information) {
this.information = information;
}
@Override
public String toString() {
return String.format("{information:%s}", information);
}
}
а также
public class ValueItems {
private String timestamp;
private String feature;
private int ean;
private String data;
public ValueItems(){
}
public ValueItems(String timestamp, String feature, int ean, String data){
this.timestamp = timestamp;
this.feature = feature;
this.ean = ean;
this.data = data;
}
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
public String getFeature() {
return feature;
}
public void setFeature(String feature) {
this.feature = feature;
}
public int getEan() {
return ean;
}
public void setEan(int ean) {
this.ean = ean;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
@Override
public String toString() {
return String.format("{timestamp:%s,feature:%s,ean:%s,data:%s}", timestamp, feature, ean, data);
}
}
Мне просто не хватает части, как я могу преобразовать Java-объект в JSON с Джексоном:
public static void main(String[] args) {
// CONVERT THE JAVA OBJECT TO JSON HERE
System.out.println(json);
}
Мой вопрос: правильны ли мои занятия? Какой экземпляр мне нужно вызвать и как я могу добиться этого вывода JSON?
12 ответов
Чтобы конвертировать ваши object
в JSON с Джексоном:
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(object);
Я знаю, что это старый (и я новичок в Java), но я столкнулся с той же проблемой. И ответы были не так ясны для меня, как новичок... поэтому я решил добавить то, что узнал.
Я использовал стороннюю библиотеку, чтобы помочь в работе: org.codehaus.jackson
Все загрузки для этого можно найти здесь.
Для базовой функциональности JSON вам необходимо добавить следующие jar в библиотеки вашего проекта: jackson-mapper-asl и jackson-core-asl
Выберите версию, в которой нуждается ваш проект. (Обычно вы можете использовать последнюю стабильную сборку).
Как только они будут импортированы в библиотеки вашего проекта, добавьте следующее import
строки вашего кода:
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
С определенным и назначенным объектами java значений, которые вы хотите преобразовать в JSON и вернуть как часть веб-службы RESTful
User u = new User();
u.firstName = "Sample";
u.lastName = "User";
u.email = "sampleU@example.com";
ObjectMapper mapper = new ObjectMapper();
try {
// convert user object to json string and return it
return mapper.writeValueAsString(u);
}
catch (JsonGenerationException | JsonMappingException e) {
// catch various errors
e.printStackTrace();
}
Результат должен выглядеть так:{"firstName":"Sample","lastName":"User","email":"sampleU@example.com"}
Просто сделай это
Gson gson = new Gson();
return Response.ok(gson.toJson(yourClass)).build();
Вы могли бы сделать это:
String json = new ObjectMapper().writeValueAsString(yourObjectHere);
Это может быть полезно:
objectMapper.writeValue(new File("c:\\employee.json"), employee);
// display to console
Object json = objectMapper.readValue(
objectMapper.writeValueAsString(employee), Object.class);
System.out.println(objectMapper.writerWithDefaultPrettyPrinter()
.writeValueAsString(json));
Вы можете использовать Google Gson, как это
UserEntity user = new UserEntity();
user.setUserName("UserName");
user.setUserAge(18);
Gson gson = new Gson();
String jsonStr = gson.toJson(user);
Примечание. Чтобы решение с наибольшим количеством голосов работало, атрибуты в POJO должны быть public
или есть общественный получатель / установщик. Примечание проверено, но я считаю, что это правило также применимо к другим json-библиотекам, таким как Google Gson.
По умолчанию Jackson 2 будет работать только с полями, которые являются либо общедоступными, либо имеют общедоступные методы получения - сериализация сущности, у которой все поля закрыты или пакет закрыт, завершится неудачей.
Ну, даже принятый ответ не совсем выводит то, о чем просила опера. Он выводит строку JSON, но с "
персонажи сбежали. Итак, хотя я могу немного опоздать, я отвечаю, надеясь, что это поможет людям! Вот как я это делаю:
StringWriter writer = new StringWriter();
JsonGenerator jgen = new JsonFactory().createGenerator(writer);
jgen.setCodec(new ObjectMapper());
jgen.writeObject(object);
jgen.close();
System.out.println(writer.toString());
public class JSONConvector {
public static String toJSON(Object object) throws JSONException, IllegalAccessException {
String str = "";
Class c = object.getClass();
JSONObject jsonObject = new JSONObject();
for (Field field : c.getDeclaredFields()) {
field.setAccessible(true);
String name = field.getName();
String value = String.valueOf(field.get(object));
jsonObject.put(name, value);
}
System.out.println(jsonObject.toString());
return jsonObject.toString();
}
public static String toJSON(List list ) throws JSONException, IllegalAccessException {
JSONArray jsonArray = new JSONArray();
for (Object i : list) {
String jstr = toJSON(i);
JSONObject jsonObject = new JSONObject(jstr);
jsonArray.put(jsonArray);
}
return jsonArray.toString();
}
}
с весной
private static final ObjectMapper objectMapper = new ObjectMapper()
.registerModule(new JavaTimeModule());
...
json = objectMapper.writeValueAsString(SomeObject);
Чтобы преобразовать объекты Java в JSON с помощью Jackson, необходимо включить 3 библиотеки: jackson-annotations, jackson-core и jackson-databind.
Рассмотрим следующее студенческое POJO:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class Student {
private int id;
private String name;
public Student() {
}
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Чтобы преобразовать его в строку JSON, выполните следующие действия:
public static String convertUsingJackson(Student student)
{
String studentJson = "";
try
{
ObjectMapper mapper = new ObjectMapper();
studentJson = mapper.writeValueAsString(student);
}
catch(Exception ex)
{
System.out.println("Error while converting Student object to Json");
ex.printStackTrace();
}
return studentJson;
}
PS: метод writeValueAsString() принимает также Hashmap, ArrayList и Arrays.
Альтернативно вы также можете использоватьcjson
библиотека для преобразования объекта Java в строку json – maven
CJson.toString()