使用Jackson将Java对象转换为JSON


166

我希望我的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);
    }
}

我只是缺少如何使用Jackson将Java对象转换为JSON的部分:

public static void main(String[] args) {
   // CONVERT THE JAVA OBJECT TO JSON HERE
    System.out.println(json);
}

我的问题是:我的课程正确吗?我必须调用哪个实例,以及如何实现此JSON输出?



谢谢,这帮助了我:)
JustTheAverageGirl 2013年

如果实体加入其他表然后按照这种方式.. /programming/19928151/convert-entity-object-to-json/45695714#45695714
塞达特Ÿ

Answers:


417

object使用Jackson 转换JSON:

ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(object);

9
唯一的事情是String从ObjectWriter中逸出。使用:new JSONObject(ow.writeValueAsString(msg))(如果通过RESTful之类的Web服务发送出去)。
jmarcosSF 2015年

出于兴趣,为什么不是os.writeValueAsJSONString(object)?
DevilCode

3
我遇到此错误,如何解决您的代码没有为com.liveprocessor.LPClient.LPTransaction类找到序列化程序,也没有发现创建BeanSerializer的属性(为避免异常,请禁用SerializationFeature.FAIL_ON_EMPTY_BEANS))

11
库的方式:导入com.fasterxml.jackson.databind.ObjectMapper; 导入com.fasterxml.jackson.databind.ObjectWriter;
diego matos-keke 2016年

object必须为所有字段都具有吸气剂,直到您要包含JSON。
Drakonoved

25

我知道这是旧的(对Java来说我是新手),但是我遇到了同样的问题。而且答案对我来说还不像新手那么清楚...所以我想我会补充我学到的东西。

我使用了一个第三方库来帮助org.codehaus.jackson 实现这一目标:可以在此处找到所有与此相关的下载。

为了获得基本的JSON功能,您需要将以下jar添加到项目的库中: jackson-mapper-asljackson-core-asl

选择项目所需的版本。(通常,您可以使用最新的稳定版本)。

将它们导入项目的库后,将以下行添加import到代码中:

 import org.codehaus.jackson.JsonGenerationException;
 import org.codehaus.jackson.map.JsonMappingException;
 import org.codehaus.jackson.map.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"}


我相信“导入”行已更改为“ import com.fasterxml.jackson.databind.ObjectMapper;”。
barrypicker19年

16

这可能有用:

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));

10

只是这样做

 for jackson it's
         ObjectMapper mapper = new ObjectMapper();  
         return mapper.writeValueAsString(object);
         //will return json in string


 for gson it's:
            Gson gson = new Gson();
            return Response.ok(gson.toJson(yourClass)).build();

什么是Response.ok?
6

当我打开Gson对象的大小大于Jackson的大小时,我将插入mongoDB的JSON大小超出了允许的限制的问题。只是一个小费。
Daniela Morais 2015年

14
问题是jackson,不是关于Gson
Ean V

2
@Codeversed Response是Jersey库中的类。Response.ok将返回状态码200 JSON响应
Pranav

2

好吧,即使接受的答案也不能完全输出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());


2

注意:为了使投票最多的解决方案起作用,POJO中的属性public必须为public getter/ setter

默认情况下,Jackson 2仅适用于公共字段或具有公共getter方法的字段-序列化具有所有私有字段或私有软件包的实体将失败。

尚未测试,但我相信此规则也适用于其他JSON库,例如Google Gson。


0
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();
    }
}

太多的工作,太多的反思!映射器应该可以解放您做这些样板工作!
伊恩五世

3
我喜欢对流器!
Christos

0

您可以像这样使用Google Gson

UserEntity user = new UserEntity();
user.setUserName("UserName");
user.setUserAge(18);

Gson gson = new Gson();
String jsonStr = gson.toJson(user);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.