我的代码创建一个新的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()方法。
我错过了任何图书馆吗?或者我错了吗?有替代方法吗?
答案 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
的单个压缩行。