Как добавить значения в json массив?
Как я могу записать новые данные в json массив? У Меня есть json файл, в нём есть массив Workers, который состоит из ключей name, age, pay, post и значений к ним. Как я могу записать в этот масив ещё 4 таких-же ключа? Использую библиотеку Simple Json
Мой Json
{
"Workers": [
{
"name": "Имя1",
"post": "Должнось1",
"age": 24,
"pay": 20000
},
{
"name": "Имя2",
"post": "Должнось2",
"age": 25,
"pay": 16000
}
//Добавить вот так
// {
// "name": "Имя3"
// "post": "Должность3"
// "age": "27"
// "pay": "15000"
// },
]
}
Код, которым я читаю файл
FileReader reader = new FileReader(filePath);
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject) jsonParser.parse(reader);
JSONArray lang= (JSONArray) jsonObject.get("Workers");
Iterator i = lang.iterator();
while (i.hasNext()) {
JSONObject innerObj = (JSONObject) i.next();
System.out.println("ФИО: " + innerObj.get("name") + "\n"
+ "Должность: " + innerObj.get("post") + "\n"
+ "Возраст: " + innerObj.get("age") + "\n"
+ "Зарплата: " + innerObj.get("pay") + "\n");
Ответы (1 шт):
Во-первых, почему вы используете библиотеку, которая уже 9 лет не поддерживается? Во-вторых, ваш json изначально составлен неправильно. Он должен содержать массив объектов Worker, а не объект Workers. Разумеется, вы можете создать класс Workers примерно такого вида:
@lombok.Data
@lombok.NoArgsConstructor
@lombok.AllArgsConstructor
class Workers {
private List<Worker> workers;
}
Однако в этом случае вы получаете бессмысленный класс-обертку над классом Worker. Можно сделать проще - получать сразу список объектов класса Worker. Посему приведите свой джейсон к такому виду :
[
{
"name": "Имя1",
"post": "Должнось1",
"age": 24,
"pay": 20000
},
{
"name": "Имя2",
"post": "Должнось2",
"age": 25,
"pay": 16000
}
]
А теперь попробуйте это (вместо lombok вы можете сгенерировать геттеры, сеттеры самостоятельно, а можете использовать lombok , так проще): import com.google.gson.Gson; import java.util.List; import java.io.*;
public class Main {
private final static Gson GSON = new Gson();
public static void main(String[] args) {
List<Worker> json = readJson("1.txt", Worker.class);
json.add(Worker.builder()
.name("Имя3")
.post("Должность3")
.age(27)
.pay(15_000L)
.build());
writeJson("2.txt", json);
}
public static <T> List<T> readJson(String filePath, Class<T> clazz) {
try (Reader reader = new BufferedReader(new FileReader(filePath))){
return (List<T>) GSON.fromJson(reader, List.class);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
}
public static <T> void writeJson(String filePath, List<T> params) {
try (Writer writer = new BufferedWriter(new FileWriter(filePath))) {
GSON.toJson(params, writer);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
}
}
@lombok.Data
@lombok.NoArgsConstructor
@lombok.AllArgsConstructor
@lombok.Builder
class Worker {
private String name;
private String post;
private Integer age;
private Long pay;
}