3

我试图找到任何有用的例子来解决这个简单的任务,但是,没有找到真正有用的东西。我是 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 = "";
}

我的应用程序(小程序)创建 的实例FMList,将数据设置为对象属性,最后将对象序列化为 JSON 字符串。

首先,我尝试了 Google Gson库。Simplenew Gson().toJson(fmList)完美地完成了这项工作,但是我的小程序未能开始给出 Gson 库有点像安全问题的异常。同时,applet 已签名并设置了所有 AccessController。

然后,我尝试使用JSON 官方网站上的类。不再有例外,但那只是简单的new JSONObject(fmList).toString()给予{}。我知道它应该以不同的方式使用。

使用包中的类将这个简单对象序列化为 JSON 字符串的正确方法是什么"org.json"

谢谢你的帮助!

4

3 回答 3

7

对于您正在使用的字段访问(不是 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 库来私有类。这工作正常:

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}

更改为私人课程会产生:{}

于 2012-05-20T14:19:59.817 回答
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 )

于 2012-05-20T14:20:27.377 回答
0

了解您正在寻找专门用于使用该org.json包进行序列化,但如果您对其他库开放,Xstream 真的很容易用于与 XML 相关的任务,例如 JSON 序列化。这是一个 JSON 教程:http: //x-stream.github.io/json-tutorial.html

于 2012-05-20T15:02:04.287 回答