#java #json #spring-boot
#java #json #весенняя загрузка
Вопрос:
Мне нужно проанализировать строку, содержащую данные файла JSON, в JSONObject и выполнить итерацию по его содержимому, чтобы получить его ключи и значения для дальнейшей обработки после. Я застрял при разборе содержимого файла после преобразования его в строку. Я попытался использовать пользовательский синтаксический анализ () , цитату(), но, похоже, я упускаю деталь и совершаю серьезную ошибку.
Это фрагмент файла json, который я обрабатываю :
{
{
"id":0,
"name": "project1",
"couverage": "100",
"completness": "44.8",
"consistency": "46",
}
{
"id":1,
"name": "project2",
"couverage": "100",
"completness": "44.8",
"consistency": "46",
}
{
"id":2,
"name": "project3",
"couverage": "100",
"completness": "44.8",
"consistency": "46",
}
}
и это код, который я разработал
public void readfromJsonFile(File jsonFile, long readTimeStamp) {
logger.info("Read from JSON file: {}", jsonFile.getName());
try{
//Read File Content
String content = new String(Files.readAllBytes(jsonFile.toPath()));
JSONParser jsonParser = new JSONParser(content);
JSONObject obj = (JSONObject) jsonParser.parse();
JSONArray key = obj.names();
for (int i = 0; i < key.length (); i) {
String keys = key.getString(i);
System.out.println(keys);
String value = obj.getString (keys);
System.out.println(value);
}catch (Exception e) {
logger.error("Failed to parse JSON File: {}", jsonFile.getName());
}
}
Комментарии:
1. Ваша проблема заключается в получении ключа и значения?
2. Да, я не могу прочитать строку моего содержимого (или файл Json)
3. Могу ли я показать один пример с Джексоном? Вы бы оценили это?
4. @AnishB. Да, почему бы и нет, если это может помочь, я был бы признателен за это
5. Является ли этот json даже правильным, я не вижу квадратных скобок, изображающих это массив или список. Я не вижу запятых между каждым внутренним разделом json для разделения элементов. И даже согласованность имеет запятую в конце, это тоже неправильно. Это даже нельзя назвать json 🙂
Ответ №1:
Вы также можете использовать привязку данных Джексона.
Создайте класс POJO. Например :
public class POJO {
private int id;
private String name;
private String couverage;
private String completness;
private String consistency;
// getters, setters and constructors
}
Измените JSON в файле.
[
{
"id":0,
"name": "project1",
"couverage": "100",
"completness": "44.8",
"consistency": "46"
},
{
"id":1,
"name": "project2",
"couverage": "100",
"completness": "44.8",
"consistency": "46"
},
{
"id":2,
"name": "project3",
"couverage": "100",
"completness": "44.8",
"consistency": "46"
}
]
Код :
public void readfromJsonFile(File jsonFile, long readTimeStamp) {
logger.info("Read from JSON file: {}", jsonFile.getName());
try {
ObjectMapper objectMapper = new ObjectMapper();
POJO[] pojos = objectMapper.readValue(jsonFile, POJO[].class);
for (int i = 0; i < pojos.length; i) {
System.out.println(pojos[i].getId());
}
} catch (Exception e) {
logger.error("Failed to parse JSON File: {}", jsonFile.getName());
}
}
Комментарии:
1. @NabilZouita Полезно ли это?
2. У меня есть модель, которая будет считывать эти значения (согласованность, покрытие, …) могу ли я использовать модель или мне нужно создать класс с атрибутами файла Json?
3. я потратил некоторое время на тестирование, но это было полезно, спасибо
Ответ №2:
Попробуйте это так
JSONArray array_= new JSONArray(content);
JSONObject obj = (JSONObject) array_.get(0);// or any index
затем вы можете использовать объект.
Комментарии:
1. к сожалению, все та же проблема!