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();
}
}
您还应该为classA
和classB
上的字段设置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{
}