Есть Json файл:
из массива псевдо компаний, надо получить и записать в Java в виде массива (ArrayList) весь файл, я перепробовал кучу вариантов, но как я понял у меня не получается именно из-за того, что в JSON'е лежит массив, если кто понимает как с помощью Jackson'a реализовать задачу, подскажите, пожалуйста.
Я разобрался, в первую очередь надо добавить, что есть файл и он НЕИЗМЕНЯЕМЫЙ, то есть вся программа нужна для того чтобы получить информацию из файла в массив, для дальнейших манипуляций с ним. Создал 2 класса: Company.java, Security.java, добавил в них переменные из json файла:
public class Company {
String name;
String address;
String telNumber;
String inn;
String ogrn;
Date date_Osnovania;
ArrayList<Security> securities;
public static void main(String[] args) throws Exception{
File file = new File("Security.json");
BufferedReader br = new BufferedReader(new FileReader(file));
String st = br.readLine();
String jsonFile = "";
while (st != null) {
jsonFile += st;
st = br.readLine();
}
Gson gson = new Gson();
Type secListType = new TypeToken<ArrayList<Security>>(){}.getType();
ArrayList<Security> securities = gson.fromJson(jsonFile, secListType);
System.out.println(securities.size());
for(Security security : securities) {
System.out.println(security);
}
}
//Getters & Setters
@Override
public String toString(){
return "Company [name=\"" + name + "\", address=\"" + address + "\", telNumber=\""
+ telNumber + "\", inn=\"" + inn + "\", ogrn=\"" + ogrn
+ "\", date_Osnovania=\"" + date_Osnovania + "\", securities=\"" + securities.toString() + "\"]";
}
такой же метод main был реализован еще и в классе Main.java, таким образом был создан массив с объектами компаний с их параметрами в которых лежат массивы с ценными бумагами принадлежащие этим компаниям
public class Security {
int id;
String code;
String name_bum;
Date date_start;
Date date_end;
String currency;
//Getters & Setters
@Override
public String toString(){
return "Security [id=\"" + id + "\", code=\"" + code + "\", name_bum=\""
+ name_bum + "\", date_start=\"" + date_start + "\", date_end=\"" + date_end + "\", currency=\"" + currency + "\"]";
}
С помощью ObjectMapper
можно десериализовать строку JSON в Map<String, Object>
вместе со всеми вложенными массивами:
String str = "{\"obj\":{\"arr\":[{\"field\":\"M1\"},{\"field\":\"M2\"}]}}";
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> map = objectMapper.readValue(str, Map.class);
System.out.println(map); // {obj={arr=[{field=M1}, {field=M2}]}}
Либо если у нас JSON с массивом, тогда десериализуем его в List<Object>
:
String arr = "[{\"field\":\"M1\"},{\"field\":\"M2\"}]";
ObjectMapper objectMapper = new ObjectMapper();
List<Object> list = objectMapper.readValue(arr, List.class);
System.out.println(list); // [{field=M1}, {field=M2}]
В общем случаем можно десериализовать в Object
, если структура JSON заранее не известна:
Object object = objectMapper.readValue(json, Object.class);
Если структура известна и статична, тогда можно создать под неё POJO класс и десериализовать в него. Также десериализовать объект можно не только из строки, но и из других источников: Десериализация JSON из URL.
С помощью этого прекрасного ресурса (http://www.jsonschema2pojo.org/), генерируете POJO-класс для объекта вашей компании и для всех вложенных объектов. Допустим назовем его Company.
Потом парсите ваш документ в строку (если Json лежит в файле); Тут могу ошибаться, уже плохо помню как именно это делается.
InputStream is = new InputStream("path_to_yourfile");
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String result = null;
while ((s = br.readLine()) != null) {
sb.append(s);
sb.append("\n");
}
result = sb.toString();
Потом добавляете зависимости какой-нибудь либы для сериализации. Мне нравится https://github.com/google/gson
Ну и потом все просто:
List<Company> companyList =
new Gson.fromJson(result, new TypeToken<List<Company>>(){}.getType());
По итогу имеете список с обьектами ваших компаний.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Создал массив из 10 чисел: 0 и 1, инициализировал каждый индекс массива как 0 или 1Написал цикл:
Такое делоЕсть список с пассажирами, которые ждут, пока каждого разбудит поток
При несуществующем RequesMapping (к примеру /fsdghfg/dsfgh/sdfghjk/dsfghjk) возвращается 500 вместо 404, ни один из Методов при этом не обрабатывается
Такая проблема: были созданы сервер и клиент и каждый по-отдельности помещён в jar пакетКак запустить сервер и клиент на терминале (Linux)? По отдельности...