java - 写入文件时附加 JSONObjects

标签 java android json android-file

我正在尝试将 JSONObjects 附加到名为 Records 的 JSONArray 中。

第一次保存就这样保存了

{
  "Records": [
    {
      "travelTime": 2,
      "totalDistance": 0,
      "pace": 0,
      "kCalBurned": 0,
      "latlng": "[lat\/lng: (-32.1521234,-63.66412321)]"
    }
  ]
}

但是当我尝试在 Records 中再次追加一个新的 jsonobject 时,它会为其创建一个新的 JSONArray,而我只想在 records 中追加一个新对象

{
  "Records": [
    {
      "travelTime": 2,
      "totalDistance": 0,
      "pace": 0,
      "kCalBurned": 0,
      "latlng": "[lat\/lng: (-31.6432292,-63.3667462)]"
    }
  ]
}{
  "Records": [
    {
      "travelTime": 1,
      "totalDistance": 0,
      "pace": 0,
      "kCalBurned": 0,
      "latlng": "[lat\/lng: (-31.9522431,-64.3461241)]"
    }
  ]
}

这是我用来保存记录的代码

   private void writeJsonData(long travelTime,float totalDistance, float pace, float kCalBurned, LinkedList<LatLng> latlng){

        String jsonStr = "";
        JSONObject records  = new JSONObject();
        try {
            records.put("travelTime", travelTime);
            records.put("totalDistance", totalDistance);
            records.put("pace", pace);
            records.put("kCalBurned", kCalBurned);
            records.put("latlng", latlng);

            JSONArray jsonArray = new JSONArray();
            jsonArray.put(records);

            JSONObject recordsObj = new JSONObject();
            recordsObj.put("Records", jsonArray);

            jsonStr = recordsObj.toString();

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        String file_name = "records.json";

        FileOutputStream fileOutputStream = null;
        try {

            fileOutputStream = new FileOutputStream(new File(mContext.getFilesDir(),file_name),true);
            fileOutputStream.write(jsonStr.getBytes());
            fileOutputStream.close();


        } catch (IOException e) {
            e.printStackTrace();
        }


    }

最佳答案

您需要一个 JSON 解析器,以便您可以在文件中找到“记录”数组并将新数据放在那里。我使用了“json simple”库(jar 可以在这里找到:https://code.google.com/archive/p/json-simple/downloads)。

首先你解析文件:

JSONParser parser = new JSONParser();
JSONObject records = null;
try {
    records = (JSONObject) parser.parse(new FileReader("records.json"));
} catch (ParseException ex) {
    ex.printStackTrace();
} catch (IOException ex) {
    ex.printStackTrace();
}

然后您找到 Records JSONArray。在那里你想追加新记录:

 JSONArray r = (JSONArray) records.get("Records");

创建新记录:

JSONObject NewObj = new JSONObject();
NewObj.put("travelTime", travelTime);
NewObj.put("totalDistance", totalDistance);
NewObj.put("pace", pace);
NewObj.put("kCalBurned", kCalBurned);
NewObj.put("latlng", latlng);

将新记录添加到“记录”JSONArray:

r.add(NewObj);

写入文件:

try (FileWriter file = new FileWriter("records.json")) {
     file.write(records.toJSONString());
} catch (IOException ex) {
     ex.printStackTrace();
}

关于java - 写入文件时附加 JSONObjects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54165223/

相关文章:

java - ArrayList 查找第一个和最后一个元素

android - 如何将 fragment 添加到选项卡式 Activity ?

java - 如何在 RecyclerView 中添加搜索过滤器来过滤解析的 JSON 数据?已编辑

java - 解释一下这行代码android

java - MySQLNonTransientConnectionException : Client does not support authentication protocol requested by server; consider upgrading MySQL client

android - 更改 android :layout_height and android:gravity in styles. xml

javascript - 当我需要显示更多时,我的选择框被缩小到两个条目

java - Java Swing中如何显示变化的文本(即显示时间随着秒数的变化)

java - Websockets、SockJs、Stomp、Spring、RabbitMQ、自动删除用户特定队列

java - 将 Json 解析为 Java bean