преобразование строкового объекта в JSONObject

#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. к сожалению, все та же проблема!