首页 > 解决方案 > Android - 如何正确编写 JSONObject 字符串

问题描述

我正在尝试读/写一个 json 文件。但是在第一次写入之后,json 被转义并且再次读取它不起作用。我有以下 json 结构,但具有更多价值:

{
  "events": {
    "XdQKixgtraz17eDHb6OW": {
      "department": "Côte-d'Or",
      "objectName": "Dijon",
      "uid": "PMhzfzWlm6vN2yL1kY2i"
    }
  }
}

这是我构建我的 json 字符串的方式:

JSONObject eventsJsonObject = new JSONObject();
JSONObject eventsData = new JSONObject();

for(Event event: eventsList){
    String eventString = gson.toJson(event);
    eventsData.put(event.getUid(), eventString);
}

eventsJsonObject.put("events", eventsData);

writeFile(filename, eventsJsonObject.toString());

我最终得到一个看起来像这样的字符串,我无法再次阅读它..:

{"events":{"XdQKixgtraz17eDHb6OW":"{\"department\":\"Côte-d'Or\",\"objectName\":\"Dijon\",\"uid\":\"PMhzfzWlm6vN2yL1kY2i\"}"}}

如您所见,在第三个分号之前有一个不应该存在的引号。如何正确构建我的 json 字符串?

谢谢你的时间。

编辑:错误来自我构建我的json字符串以写入文件的位置,所以我重写了我的问题。

标签: javaandroidjsonescaping

解决方案


试试这个代码

public static JSONObject readJSONFile (String path, Context context) {
String jsonStr = null;
try {
    InputStream is = getActivity().getAssets().open(path);
    int size = is.available();
    byte[] buffer = new byte[size];
    is.read(buffer);
    is.close();
    jsonStr = new String(buffer, "UTF-8");
} catch (IOException ex) {
    ex.printStackTrace();
    return null;
}
    JSONObject jsonObj = new JSONObject((jsonStr ));
    return jsonObj;
}

推荐阅读