#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
Надеюсь, это поможет.