Java Jackson库JSON映射到字符串

Java Jackson库JSON映射到字符串,java,json,jackson,mapper,Java,Json,Jackson,Mapper,我有一个类(a和B是我的对象) 如何解决它?代码应该将类型为A的实例传递给writeValueAsString方法,而不是实际的类 ObjectMapper将能够通过反射来确定实例的类型,但是如果不传递实例,则无法确定要放置在生成的JSON中的字段值 还要确保捕获或抛出适当的异常 public void save() { try { A a = new A(); ObjectMapper mapper = new ObjectMapper();

我有一个类(
a
B
是我的对象)


如何解决它?

代码应该将类型为
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();
    }

}
您还应该为class
A
和class
B
上的字段设置Acessor注意我在前一句中包括了
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;}
}
public A{
私人名单b;
私人INTC;
私有B getB(){return B;}
私有void setB(B){this.B=B;}
private int getC(){return c;}
私有void setC(int c){this.c=c;}
}
下面是一个我已经测试过的完整的工作示例

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{


}
import java.io.IOException;
导入java.util.List;
导入org.codehaus.jackson.jsongGenerationException;
导入org.codehaus.jackson.map.JsonMappingException;
导入org.codehaus.jackson.map.ObjectMapper;
公共A类{
私人名单b;
私人INTC;
公共列表getB(){
返回b;
}
公营房屋登记册(名单b){
这个.b=b;
}
公共int getC(){
返回c;
}
公共无效setC(INTC){
这个.c=c;
}
公共静态void main(字符串[]args)抛出JsonGenerationException、JsonMappingException、IOException{
A=新的A();
ObjectMapper mapper=新的ObjectMapper();
字符串temp=mapper.writeValueAsString(a);
系统输出打印项次(温度);
}
}
B类{
}
如果这个简单的例子不起作用,
jackson映射器asl.jar
文件很可能不在构建路径上。从下载文件并将其放置在本地计算机上的某个位置

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


然后选择构建路径>库>添加外部JAR。找到jar,然后点击OK。

@user2520969该示例有帮助吗?如果您复制了我的完整示例,但它没有运行,那么这是一个构建路径问题。这意味着您的类路径中没有适当的jar文件。您正在使用Eclipse吗?另外,请确保在类BI中的每个字段都有get/set方法,并在我的类A和方法save go中更改了一些内容。我用List=new ArrayList()替换了List b=new List()。现在我有另一个问题。。我有两个活动中的保存和读取功能,保存总是可以,但是读取功能第一次可以,第二次可以。为什么??在两个活动中调用相同的函数..“无结果”的意思是?我猜您只需要在私有字段旁边添加
@JsonProperty
注释(Jackson遵循Bean约定,私有字段被忽略,默认情况下只有公共字段被序列化)。
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;}
}
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{


}