如何使用“org.json”包中的类将对象序列化为JSON字符串?

时间:2012-05-20 14:17:38

标签: java json

我试图找到任何有用的例子来解决这个简单的任务,然而,找不到任何真正有用的东西。我是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字符串的正确方法是什么?

谢谢你的帮助!

3 个答案:

答案 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