Android新的JSON数据追加到JSON文件中

#获取用户提交的JSON数据,然后追加到现有的JSON文件中,现有的JSON文件有数据,追加到数据最后面。

JSON文件存在

InputStream inputStream = getResources().openRawResource(R.raw.json);

#用户提交的数据格式如下:

{"-232323298": "{\"popup_rules\":[{\"id\":\"ID值\",\"action\":\"action值\"},{\"id\":\"ID值\",\"action\":\"action值\"}]}" },

现有的JSON文件数据格式:

[
  {
    "-1835777899": "{\"popup_rules\":[{\"id\":\"ID值\",\"action\":\"action值\"},{\"id\":\"ID值\",\"action\":\"action值\"}]}"
  },
  {
    "-232323298": "{\"popup_rules\":[{\"id\":\"ID值\",\"action\":\"action值\"},{\"id\":\"ID值\",\"action\":\"action值\"}]}"
  },
  {
    "-645454266": "{\"popup_rules\":[{\"id\":\"ID值\",\"action\":\"action值\"},{\"id\":\"ID值\",\"action\":\"action值\"},{\"id\":\"ID值\",\"action\":\"action值\"}]}"
  },
 ====数据追加到后面====
]

【以下回答由 GPT 生成】

我可以通过以下步骤来实现将用户提交的JSON数据追加到已有的JSON文件中:

  1. 读取已存在的JSON文件数据。
  2. 解析已存在的JSON数据为一个JSON数组。
  3. 解析用户提交的JSON数据。
  4. 将用户提交的JSON数据添加到已存在的JSON数组中。
  5. 将更新后的JSON数组写入到文件中。

下面是实现这些步骤的代码:

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

// 1. 读取已存在的JSON文件数据
InputStream inputStream = getResources().openRawResource(R.raw.json);
String existingJson = readInputStreamAsString(inputStream);

// 2. 解析已存在的JSON数据为一个JSON数组
JSONArray existingArray;
try {
    existingArray = new JSONArray(existingJson);
} catch (JSONException e) {
    // 处理JSON解析错误
    e.printStackTrace();
    return;
}

// 3. 解析用户提交的JSON数据
String userJson = "{\"-232323298\":\"{\\\"popup_rules\\\":[{\\\"id\\\":\\\"ID值\\\",\\\"action\\\":\\\"action值\\\"}]}\",}";

JSONObject userObject;
try {
    // 去除多余的逗号(,)
    int lastCommaIndex = userJson.lastIndexOf(",");
    userJson = userJson.substring(0, lastCommaIndex) + userJson.substring(lastCommaIndex + 1);

    userObject = new JSONObject(userJson);
} catch (JSONException e) {
    // 处理JSON解析错误
    e.printStackTrace();
    return;
}

// 4. 将用户提交的JSON数据添加到已存在的JSON数组中
existingArray.put(userObject);

// 5. 将更新后的JSON数组写入到文件中
String updatedJson = existingArray.toString();

// 写入到文件的逻辑请根据你的具体情况自行实现

请注意,在以上代码中,readInputStreamAsString 方法用于将 InputStream 对象转换为字符串。你需要自行实现这个方法。

此外,请确保你已添加 JSON 解析的库(如 org.json)到你的项目中,以便在代码中使用 JSON 相关的对象和方法。

希望这个解决方案对你有所帮助!如果你还有其他问题,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

引用 皆我百晓生 小程序回复内容作答:
要实现将用户提交的JSON数据追加到现有的JSON文件中,可以使用以下步骤:

  1. 读取现有的JSON文件数据:
// 读取JSON文件数据
String existingData = null;
try {
    InputStream inputStream = getResources().openRawResource(R.raw.json);
    int size = inputStream.available();
    byte[] buffer = new byte[size];
    inputStream.read(buffer);
    inputStream.close();
    existingData = new String(buffer, "UTF-8");
} catch (IOException e) {
    e.printStackTrace();
}

// 将现有的JSON数据解析为JSONArray
JSONArray jsonArray = null;
try {
    jsonArray = new JSONArray(existingData);
} catch (JSONException e) {
    e.printStackTrace();
}
  1. 解析用户提交的JSON数据并将其添加到现有的JSON数组中:
// 解析用户提交的JSON数据
String userData = "{\"-232323298\": \"{\\\"popup_rules\\\":[{\\\"id\\\":\\\"ID值\\\",\\\"action\\\":\\\"action值\\\"},{\\\"id\\\":\\\"ID值\\\",\\\"action\\\":\\\"action值\\\"}]}\"}";

try {
    JSONObject userJsonObject = new JSONObject(userData);
    Iterator<String> keys = userJsonObject.keys();
    while (keys.hasNext()) {
        String key = keys.next();
        String value = userJsonObject.getString(key);
        JSONObject jsonObject = new JSONObject(value);
        jsonArray.put(new JSONObject().put(key, value));
    }
} catch (JSONException e) {
    e.printStackTrace();
}
  1. 将更新后的JSONArray保存回JSON文件中:
// 将更新后的JSONArray保存回JSON文件
try {
    FileOutputStream fileOutputStream = new FileOutputStream(getResources().openRawResourceFd(R.raw.json).getFileDescriptor());
    fileOutputStream.write(jsonArray.toString().getBytes());
    fileOutputStream.close();
} catch (IOException e) {
    e.printStackTrace();
}

这样就将用户提交的JSON数据追加到现有的JSON文件中了。注意,在解析用户提交的JSON数据时,根据提供的示例,需要对特殊字符进行转义,例如将双引号转义为\\\"、将反斜杠转义为\\\\等。