【问题标题】:Android - How to correctly write a JSONObject stringAndroid - 如何正确编写 JSONObject 字符串
【发布时间】:2019-12-12 01:05:44
【问题描述】:

我正在尝试读/写一个 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 字符串以写入文件的位置,因此我重写了我的问题。

【问题讨论】:

  • “我最终得到了一个像这样的字符串”——大概就是你以jsonString 传递给writeFile() 的内容。因此,请检查用于创建 jsonString 的代码,看看哪里出错了。
  • 是的,我只是使用 myJsonObject.toString() 但我找不到没有转义字符的字符串化方法。
  • 您的代码看起来不错,那么您在哪里看到带有转义字符的字符串?
  • where did you see the string with escaped characters? 当我在写入文件后尝试读取文件时。我把它写成 jsonObject.toString() 所以它就在那里 json 被转义了。如果我使用 StringEscapeUtils.unescapeJson 它不能正确转义。
  • 我已经编辑了我的问题,因为没有答案可以回答前一个问题,因为错误不是来自那个。

标签: java android json escaping


【解决方案1】:

试试这个代码

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;
}

【讨论】:

  • 没有变化。我从内部存储而不是资产打开文件。
  • 我已经编辑了我的问题,因为没有答案可以回答前一个问题,因为错误不是来自那个。
猜你喜欢
  • 2018-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多