首先,您的 json 在语法上是正确的,但我猜您希望将对象表示为值,在您的情况下,大括号被评估为简单的字符串:
String curStr = "{\"e\": \"{}\", \"f\": \"{}\", \"g\": \"{}\"}";
JSONObject oldObj = new JSONObject(curStr);
使用这样的 json 将产生值作为对象:
String curStr = "{\"e\": {}, \"f\": {}, \"g\": {}}";
JSONObject oldObj = new JSONObject(curStr);
无论如何,我尝试创建那个 JSONObject,然后打印它的 toString,它只会打印 json,没有任何附件名称。
正如您在评论中发现的那样,问题是由 Gson 给出的,它将 JSONObject 评估为地图。我试过一个小例子,我有“地图”作为字段。可能我尝试过不同版本的 Gson。
Gson gson = new Gson();
String jsonStr = gson.toJson(oldObj);
结果:{"map":{"f":"{}","g":"{}","e":"{}"}}
如果要创建自定义对象并使用 Gson 反序列化 json,请创建具有这些属性的类并使用 fromJson(String json, Class clazz) 方法
public class Test {
private String e;
private String f;
private String g;
}
和
Gson gson = new Gson();
Test myTestObj = gson.fromJson(curStr, Test.class);
希望这会帮助你。:)