使用 Jackson 将 Java 对象转换为 JSON
Posted
技术标签:
【中文标题】使用 Jackson 将 Java 对象转换为 JSON【英文标题】:Converting Java objects to JSON with Jackson 【发布时间】:2013-03-25 01:07:46 【问题描述】:我希望我的 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);
我只是错过了如何 的部分:
public static void main(String[] args)
// CONVERT THE JAVA OBJECT TO JSON HERE
System.out.println(json);
我的问题是:我的课程是否正确?我必须调用哪个实例以及如何实现此 JSON 输出?
【问题讨论】:
以下教程可能会有所帮助:mkyong.com/java/how-to-convert-java-object-to-from-json-jackson 【参考方案1】:要使用 Jackson 将您的 object
转换为 JSON:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(object);
【讨论】:
唯一的问题是字符串从 ObjectWriter 中逃脱。使用:new JSONObject(ow.writeValueAsString(msg)) 如果它是通过 RESTful 等 Web 服务发送出去的。【参考方案2】:我知道这是旧的(而且我是 java 新手),但我遇到了同样的问题。而且答案对我来说不像新手那么清楚......所以我想我会补充我所学到的。
我使用了第三方库来帮助完成这项工作:org.codehaus.jackson
可以在here找到所有下载。
对于基本 JSON 功能,您需要将以下 jar 添加到项目的库中: jackson-mapper-asl 和 jackson-core-asl
选择您的项目需要的版本。 (通常您可以使用最新的稳定版本)。
将它们导入您的项目库后,将以下 import
行添加到您的代码中:
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
定义了 java 对象并分配了您希望转换为 JSON 并作为 RESTful Web 服务的一部分返回的值
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"
【讨论】:
你让我开心,谢谢【参考方案3】:这可能有用:
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));
【讨论】:
【参考方案4】:只需遵循以下任何一项:
对于 jackson 它应该可以工作:
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(object);
//will return json in string
对于 gson 它应该可以工作:
Gson gson = new Gson();
return Response.ok(gson.toJson(yourClass)).build();
【讨论】:
什么是 Response.ok ? 当我打开我的 Gson 对象的大小比使用 Jackson 时,插入 mongoDB 的 JSON 大小超过了允许的限制时遇到问题。只是一个提示。 问题是关于jackson
,而不是Gson
@Codeversed Response 是 Jersey 库中的一个类。 Response.ok 将返回带有状态码 200 的 JSON 响应。【参考方案5】:
你可以这样做:
String json = new ObjectMapper().writeValueAsString(yourObjectHere);
【讨论】:
【参考方案6】:你可以这样使用 Google Gson
UserEntity user = new UserEntity();
user.setUserName("UserName");
user.setUserAge(18);
Gson gson = new Gson();
String jsonStr = gson.toJson(user);
【讨论】:
【参考方案7】:好吧,即使是接受的答案也没有完全输出 op 要求的内容。它输出 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());
【讨论】:
【参考方案8】:注意:要使投票最多的解决方案发挥作用,POJO 中的属性必须是 public
或具有公共 getter
/setter
:
默认情况下,Jackson 2 仅适用于 public,或者有一个公共的 getter 方法——序列化一个实体 将所有字段设为私有或包私有将失败。
尚未测试,但我相信此规则也适用于其他 JSON 库,例如 google Gson。
【讨论】:
【参考方案9】: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();
【讨论】:
工作太多,反思太多!映射器应该让你从做这些样板的东西中解放出来! 我喜欢 Convectors!以上是关于使用 Jackson 将 Java 对象转换为 JSON的主要内容,如果未能解决你的问题,请参考以下文章
使用jackson将pojo(对象列表)转换为java中的json
在Jackson中将Java对象转换为JsonNode [重复]
在将 json 反序列化为对象时,使用 jackson 将 asp.net / MS 专有 json Dateformat 转换为 java8 LocalDateTime