Я думаю, что результат, который вы видите, является правильным, и именно так и должно быть JSON. JSON - это формат, основанный на значении ключа.
Вставленный вывод означает, что это массив json объектов
[
{
"Nutrient" : "Calories",
"Amount" : " 289.00",
"Unit" : " kcal"
}, {
"Nutrient" : "Fat",
"Amount" : " 17.35",
"Unit" : " g"
}
]
Ниже JSON на самом деле не имеет смысла, так как нет ключей от объекта. Даже если вы попытаетесь проанализировать этот тип JSON с Джексоном, он выдаст ошибку Исключение в потоке "main" com.faster xml .jackson.core.JsonParseException: неожиданный символ ('{ '(код 123)): ожидалось, что двойная кавычка будет начинаться с имени поля в [Source: (String) "{. Вы можете попробовать это
{
{
"Nutrient" : "Calories",
"Amount" : " 289.00",
"Unit" : " kcal"
}, {
"Nutrient" : "Fat",
"Amount" : " 17.35",
"Unit" : " g"
}
}
Другой вариант - рассматривать каждый json объект как уникальный узел с уникальным именем, как показано ниже, см. Ключевое слово set1 и set2
{
"set1": {
"Nutrient" : "Calories",
"Amount" : " 289.00",
"Unit" : " kcal"
},
"set2": {
"Nutrient" : "Fat",
"Amount" : " 17.35",
"Unit" : " g"
}
}
Для по какой-то причине, если вы действительно хотите иметь {} вместо [], просто выполните строковую операцию и замените 1-й "[" на "{" и последний "]" на "}
Отредактировал ответ, чтобы соответствовать отредактированному вопросу: Теперь, когда мы знаем, что ваш JSON является массивом JSON объектов, вы должны читать его как JSONArray вместо JSONObject, также вы больше не можете его читать для хэш-карты, это должен быть список, где каждый элемент в списке будет JSONObject, который имеет ваш да та. Фрагмент рабочего кода ниже
String content = Files.readString(filePath);
JSONArray jsonArray = new JSONArray(content);
List<LinkedTreeMap> yourList = new Gson().fromJson(jsonArray.toString(), ArrayList.class);
for(LinkedTreeMap l : yourList) {
System.out.println(l.get("Amount"));
System.out.println(l.get("Nutrient"));
System.out.println(l.get("Unit"));
}