对于JSONObject类型,未定义toJSONString()

时间:2013-07-28 11:40:12

标签: java json

我的代码创建一个新的JSONObject并写入文件:

JSONObject obj = new JSONObject();
obj.put("name", "abcd");
obj.put("age", new Integer(100));
JSONArray list = new JSONArray();
list.add("msg 1");
list.add("msg 2");
list.add("msg 3");
obj.put("messages", list);
try {
    FileWriter file = new FileWriter("c:\\test.json");
    file.write(obj.toJSONString());
    file.flush();
    file.close();    
} catch (IOException e) {
    e.printStackTrace();
}
System.out.print(obj);

我的问题在

file.write(obj.toJSONString());

它说

  

对于JSONObject类型,未定义toJSONString()方法。

我错过了任何图书馆吗?或者我错了吗?有替代方法吗?

4 个答案:

答案 0 :(得分:9)

JSONObject类没有toJSONString()方法。相反,它会覆盖toString()方法以生成json。

要获取对象的json表示,只需使用obj.toString()

答案 1 :(得分:2)

我遇到同样的问题,如果您想使用toJSONString(),则需要导入json-simple-1.1.jar库。

答案 2 :(得分:0)

仅对JsonObject进行字符串化将不起作用。使用json-simple 3.1.0,JsonObject.toString()不会将对象写为有效JSON。

将JSON对象指定为:

JsonObject my_obj = new JsonObject();
my_obj.put("a", 1);
my_obj.put("b", "z");
my_obj.put("c", true);
file.write(my_obj.toString());

将另存为

{a=1, b=z, c=true}

哪个不是有效的JSON。

要解决此问题,您需要使用Jsoner

工作示例

import com.github.cliftonlabs.json_simple.JsonObject;
import com.github.cliftonlabs.json_simple.Jsoner;

import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class Example {

    public static void main(String args[]) {
        JsonObject my_obj = new JsonObject();
        my_obj.put("a", 1);
        my_obj.put("b", "z");
        my_obj.put("c", true);

        try {
            BufferedWriter writer = Files.newBufferedWriter(Paths.get("test.json"));
            Jsoner.serialize(my_obj, writer);
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

另存为

{"a":1,"b":"z","c":true}

哪个是有效的JSON。

答案 3 :(得分:0)

方法toJSONString()来自json-simple,但我想您正在使用org.json

org.json可以替代toJSONString()。 您可以简单地使用:obj.toString(1)

toString()方法的区别在于,如果您将“ 1”作为参数org.json传递,则会自动格式化并美化JSON。 因此,文件中没有JSON的单个压缩行。