Java: преобразование json в Map
Не очень понимаю как работать с картами на Java, а решение нужно срочно.
Следующая попытка осуществить задуманное возвращает пустую карту (но не null).
public Map<String, String> parse () {
try (Reader reader = new FileReader(filepath)) {
JSONObject jsonObj = new JSONObject(reader);
@SuppressWarnings("unchecked")
Map<String, String> map = new Gson().fromJson(jsonObj.toString(), Map.class);
this.data = map;
printValues(map);
return map;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public static void printValues(Map<String, String> map){
System.out.println("===============JSON OUT===================");
for(Map.Entry<String, String> pair : map.entrySet())
{
String value = pair.getValue();
System.out.println(value);
}
System.out.println("===============JSON OUT===================");
}
json имеет следующий вид:
{
"key1" : "value1",
"key2" : "value2",
"key3" : "value3",
"key4" : "value4",
"key5" : "value5",
"key6" : "value6"
}
Т.е. это всегда простейший словарь String : String.
Работаю над фреймворком с уже установленными соглашениями по ведению данных, поэтому Map<String, Object> не подходит.
Также изначально количество ключей и их имена не известны.
Подскажите в чем ошибка и как реализовать задуманное. Спасибо!
Ответы (1 шт):
Не стал вдаваться в подробности почему, но FileReader в данном случае отрабатывает некорректно. Данные из файла не читаются.
В случае использования FileInputStream и посимвольного считывания данных в строку, всё работает как нужно.
public Map<String, String> parse() {
StringBuilder jsonObj = new StringBuilder();
try(FileInputStream fin=new FileInputStream(filepath))
{
int i=-1;
while((i=fin.read())!=-1){
jsonObj.append((char) i);
}
} catch (IOException e) {
e.printStackTrace();
}
Map<String, String> map = new Gson().fromJson(jsonObj.toString(), Map.class);
printValues(map);
return map;
}