7

我创建新 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

4 回答 4

10

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

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

于 2013-07-28T13:32:36.493 回答
3

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

于 2016-11-28T10:35:14.933 回答
1

该方法toJSONString()来自json-simple但我猜你正在使用org.json.

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

toString()方法的不同之处在于,如果您将“1”作为参数传递,则会org.json自动格式化和美化您的JSON. 因此,您的文件中不会只有一个压缩行JSON

于 2020-07-01T06:40:50.387 回答
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。

于 2020-01-02T19:52:25.277 回答