我有一个班级(A
和B
是我的对象)
public A {
private List<B> b;
private int c;
}
我有一个String变量temp。所以我会在这个变量中保存我的对象的JSON字符串。怎么样?
我尝试过这种方法,但没有结果。
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);
}
我该如何解决?
答案 0 :(得分:12)
代码应该将类型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();
}
}
您还应该拥有课程A
和课程B
上的字段。 通知我在上一句中加入了B
,因为杰克逊必须能够映射我们提供给它的实例上的所有字段。
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{
}
如果这个简单示例不起作用,jackson-mapper-asl.jar
文件很可能不在构建路径上。从here下载文件并将其放在本地计算机上。
接下来通过Eclipse,右键单击您的项目并选择属性。
然后选择Build Path&gt;图书馆&gt;添加外部罐子。找到jar,然后点击OK。