杰克逊图书馆JSON映射器到字符串

use*_*969 7 java json jackson mapper

我有一个班(A并且B是我的对象)

public A   {
    private List<B> b;
    private int c;
}
Run Code Online (Sandbox Code Playgroud)

我有一个String变量temp.所以我会在这个变量中保存我的对象的JSON字符串.怎么样?

我试过这个2方法,但没有结果.

public void save() {
    ObjectMapper mapper = new ObjectMapper();
    String temp = mapper.writeValueAsString(a);
}
public void read(String temp) {
    ObjectMapper mapper = new ObjectMapper();
    A a = mapper.readValue(temp, A.class);
}
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

Kev*_*sox 13

代码应该将Type的实例传递A给writeValueAsString方法而不是实际的类.

在ObjectMapper将能够确定通过反射实例的类型,但是如果你没有通过一个实例它无法确定字段值的,以在生成JSON的地方.

另外一定要抓住或抛出适当的例外.

public void save() {

try {
        A a = new A();
        ObjectMapper mapper = new ObjectMapper();
        String temp = mapper.writeValueAsString(a);

    } catch (JsonGenerationException e) {
       e.printStackTrace();
    } catch (JsonMappingException e) {
       e.printStackTrace();
    } catch (IOException e) {
       e.printStackTrace();
    }

}
Run Code Online (Sandbox Code Playgroud)

您还应该为类A和类上的字段设置附件B. 注意我B在上一句中包含,因为Jackson必须能够映射我们提供给它的实例上的所有字段.

public A   {
    private List<B> b;
    private int c;

    private B getB(){ return b;}
    private void setB(B b){this.b = b;}
    private int getC(){return c;}
    private void setC(int c){this.c = c;}
}
Run Code Online (Sandbox Code Playgroud)

这是我测试过的一个完整的工作示例.

import java.io.IOException;
import java.util.List;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class A {

    private List<B> b;
    private int c;

    public List<B> getB() {
        return b;
    }

    public void setB(List<B> b) {
        this.b = b;
    }

    public int getC() {
        return c;
    }

    public void setC(int c) {
        this.c = c;
    }

    public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
        A a = new A();
        ObjectMapper mapper = new ObjectMapper();
        String temp = mapper.writeValueAsString(a);
        System.out.println(temp);   
    }
}

class B{


}
Run Code Online (Sandbox Code Playgroud)

如果这个简单示例不起作用,则该jackson-mapper-asl.jar文件很可能不在构建路径上.从此处下载文件并将其放在本地计算机上的某个位置.

接下来通过Eclipse,右键单击您的项目并选择属性.

然后选择Build Path> Libraries> Add External Jars.找到jar然后单击OK.