Я хочу войти в систему, взяв данные из файла JSON с помощью Java Program

#java #json

#java #json

Вопрос:

это userInfo.json

 {
 "userInfo":[
 { "name":"John", "password":"Doe" },
 { "name":"Anna", "password":"Smith" },
 { "name":"Peter","password":"Jones" }
]}
  

это моя часть класса Java.

 try (FileReader reader = new FileReader("C:\Users\user\Documents\NetBeansProjects\TomCatServer\src\java\logInfo.json")) {
        //Read JSON file
         JSONObject obj = (JSONObject) jsonParser.parse(reader);
         /*JSONObject obj2= (JSONObject) obj.get("address");
         pr.println(obj2.get("city"));*/
         HashMap<String, String> login = new HashMap<String, String>();
         JSONArray logInfo=(JSONArray) obj.get("userInfo"); 

         for(int i=0; i<logInfo.size(); i  )
         {
         String name = (String)(JSONObject) logInfo[i].get("name");\error here
         String password = (String)(JSONObject) logInfo[i].get("password");
         \error here when get the password
         login.put(name,password)
        }
  

Я страдаю от синтаксической ошибки при анализе имени и пароля из файла json.

Комментарии:

1. logInfo не является массивом Java. Таким образом, вы можете использовать [] для доступа к его элементам. Посмотрите на javadoc JSONArray, чтобы узнать, какие методы у него есть.

Ответ №1:

Гораздо более чистый способ чтения вашего файла JSON — использовать ObjectMapper class библиотеки jackson json.

Обратитесь к образцу руководства и поймите, как вы можете включить библиотеку Jackson в свою базу кода.

Короче говоря, вы будете создавать User класс модели с name password двумя полями и как в нем. В идеале этот фрагмент кода должен решить вашу проблему.

 List<User> myUsers = mapper.readValue(jsonArray, List.class);
  

Но ваша структура данных не является прямой, поскольку вы определили избыточность userInfo в JSON. Если вам нужно сохранить этот ключ в ваших данных json, вы также должны сказать Джексону пропустить корень при разборе json, используя приведенный ниже код.

 objectMapper.configure(SerializationConfig.Feature.UNWRAP_ROOT_VALUE, true);
  

Если вы можете изменить свой файл json, я бы посоветовал вам реструктурировать его следующим образом

 [
 { "name":"John", "password":"Doe" },
 { "name":"Anna", "password":"Smith" },
 { "name":"Peter","password":"Jones" }
]
  

Также узнайте больше о Джексоне на их странице github

Надеюсь, это поможет.