我试图找到任何有用的例子来解决这个简单的任务,然而,找不到任何真正有用的东西。我是Java的初学者,我当然需要一些帮助。
我有两个简单的Java类:
private class FMList {
public List<FMItem> items = new ArrayList();
public long size = 0;
public int dirs = 0;
public int files = 0;
public String path = "";
}
private class FMItem {
public boolean is_dir = false;
public String[] ascii = {};
public String name = "";
public String mode = "";
public long size = 0;
public long mtime = 0;
public boolean ext = false;
public String cache = "";
}
我的应用程序(applet)创建FMList
的实例,将数据设置为对象属性,最后将对象序列化为JSON字符串。
首先,我尝试了Google Gson库。简单的new Gson().toJson(fmList)
完美地完成了这项工作,但是我的applet未能开始提供Gson库有点像安全问题的异常。同时,小程序已签名,并且所有AccessController都已设置。
然后,我尝试使用JSON official website中的类。没有例外,但简单的new JSONObject(fmList).toString()
仅提供{}
。我知道它应该以某种方式以不同的方式使用。
使用"org.json"
包中的类将此简单对象序列化为JSON字符串的正确方法是什么?
谢谢你的帮助!
答案 0 :(得分:6)
对于您正在使用的字段访问(不是get / set方法),您必须指定它们: http://www.json.org/javadoc/org/json/JSONObject.html#JSONObject(java.lang.Object, java.lang.String[])
你要么使用JSON Writer,要么使用“Stringer”(写入流或创建字符串)来获得漂亮的json。
http://www.json.org/javadoc/org/json/JSONWriter.html
http://www.json.org/javadoc/org/json/JSONStringer.html
更新:使用简单的org.json lib,类也不能是私有的。 这很好用:
public class Main {
public static class FMList {
public long size = 0;
public int dirs = 0;
public int files = 0;
public String path = "";
}
public static void main(String[] args) {
System.out.println(new JSONObject(new FMList(), new String[] { "dirs", "files" }).toString());
}
}
制作:{"files":0,"dirs":0}
更改为私人课程会产生:{}
答案 1 :(得分:0)
JSONObject期望使用getter,但是你的类只使用公共变量而不是getter:
JSONObject(java.lang.Object bean)
Construct a JSONObject from an Object using bean getters.
http://www.json.org/javadoc/org/json/JSONObject.html#JSONObject(java.lang.Object)
答案 2 :(得分:0)
理解您正在使用org.json
包专门查找序列化,但如果您对其他库开放,则Xstream非常易于用于与XML相关的任务,例如JSON序列化。这是一个JSON教程:http://x-stream.github.io/json-tutorial.html。