#java #android #json #gson
#java #Android #json #gson
Вопрос:
Я хочу создать структуру массива JSON, подобную этой, или добавить объект к структуре
{ "user" : [
{"name" : "user1", "email": "user1@gmail"},
{"name": "user2", "email": "user2@gmail"}
]
}
Я использую GSON для записи этого в файл
public void appendToObject(File jsonFile, String key, String value) {
Objects.requireNonNull(jsonFile);
Objects.requireNonNull(key);
Objects.requireNonNull(value);
if (jsonFile.isDirectory()) {
throw new IllegalArgumentException("File can not be a directory!");
}
try {
JsonObject node = readOrCreateNew(jsonFile);
JsonArray userArray = new JsonArray();
userArray.add(user(key,value));
node.add("user", userArray);
FileWriter writer = new FileWriter(jsonFile)
gson.toJson(node, writer);
}catch (Exception e)
{
Log.d("display1", "appendToObject: error" e.getLocalizedMessage());
e.printStackTrace();
}
}
private JsonObject user(String user, String password){
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("name", user);
jsonObject.addProperty("password", password);
return jsonObject;
}
private JsonObject readOrCreateNew(File jsonFile) throws IOException {
if (jsonFile.exists() amp;amp; jsonFile.length() > 0) {
try (BufferedReader reader = new BufferedReader(new FileReader(jsonFile))) {
return gson.fromJson(reader, JsonObject.class);
}
}
return new JsonObject();
}
Вот код с интегрированными предложениями и функциями чтения и записи файлов JSON
но я получаю "user1":"{"values":[null,"user13","useremail13"]}"}
как структурировать ее так, чтобы я получал желаемый результат
Ответ №1:
Я опустил часть вашего кода appendToObject
. Но смысл должен быть ясен.
public void appendToObject(File jsonFile, String key, String value) {
...
JsonObject node = readOrCreateNew(jsonFile);
JsonObject newUser = user(key, value);
JsonElement user = node.get("user");
if (user != null amp;amp; user.isJsonArray()){
((JsonArray) user).add(newUser);
} else {
JsonObject root = new JsonObject();
node.add("user", createArray(newUser));
}
...
}
private JsonObject createUserArray(JsonObject ... objects){
JsonArray userArray = new JsonArray();
for (JsonObject user : objects) {
userArray.add(user);
}
return userArray;
}
private JsonObject user(String email, String name){
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("name", name);
jsonObject.addProperty("email", email);
return jsonObject;
}
Комментарии:
1. однако, когда я использую
userArray.add(user(key,value)); root.add("user", userArray);
пользовательские начальные значения, они каждый раз перезаписываются новым значением2. Вы хотите добавить объекты к существующему узлу? Если да, опубликуйте имеющуюся у вас структуру в файле, который вы пытаетесь обновить
3. привет, я добавил весь класс, взгляните