Как разобрать Dynami c вложенный JSON с теми же ключами и сохранить в JAVA классе - PullRequest
0 голосов
/ 11 июля 2020

Я пытаюсь прочитать сложную полезную нагрузку (древовидную структуру) для выполнения PATCHMAPPING (частичное обновление). Для начала я читаю JSON из полезной нагрузки и пытаюсь проанализировать и сохранить его значение.

JSON ДАННЫЕ:

{
  "data": [{
      "name": "name_new",
      "description": "new_decsription",
      "group_id": 1,
      "values": [{
          "inner_group_id": 1,
          "addclass_id": [1],
          "removeclass_id": [2, 3]
        },
        {
          "inner_group_id": 2,
          "addclass_id": [1],
          "removeclass_id": [2, 3]
        },
        {
          "addclass_id": [1],
          "removeclass_id": [2, 3]
        }
      ]
    },
    {
      "group_id": 2,
      "values": [{
        "inner_group_id": 2,
        "addclass_id": [1, 2, 3],
        "removeclass_id": []
      }]
    }
  ]
}

ПРИМЕЧАНИЕ: group_id может иметь inner_group_id и классы для удаления и классы для добавления. Но он также может напрямую иметь классы для удаления и классы для добавления.

Я использую следующий код для его анализа и пытаюсь сохранить в HASHMAP. Но он не разбирается должным образом. Кроме того, я не уверен, сохраню ли я в хэш-карте, как я помечу каждую inner_group в ее группу или class_id в ее группу. чтобы установить их после того, как я смогу разобрать:

Group. java

public class Group {
    int groupId;
    List<InnerGroup> innerGroups;
    List<Integer> addClassId;
    List<Integer> removeClassId;
    
    // Getters and Setters
    }

**InnerGroup.java**

public class InnerGroup {
    int innerGroupId;
    List<Integer> addClassId;
    List<Integer> removeClassId;

    // Getters and Setters
}

Я застрял на этом с последних 2 дней. Любая помощь высоко ценится. Заранее спасибо.

1 Ответ

0 голосов
/ 11 июля 2020

В классах ниже используется Jackson для десериализации JSON. Приведенное ниже дает представление о том, как анализировать предоставленный JSON и не обязательно может быть полным решением.

Классы сущностей

package org.test;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonIgnoreProperties(ignoreUnknown = true)
public class GroupContainer {
    
    @JsonProperty(value = "data")
    private List<Group> data;

    public List<Group> getData() {return data;}
    public void setData(List<Group> data) {this.data = data;}

}//class closing
    package org.test;
    
    import java.util.List;
    
    import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    import com.fasterxml.jackson.annotation.JsonProperty;
    
    @JsonIgnoreProperties(ignoreUnknown = true)
    public class Group {
    
        @JsonProperty(value = "group_id")
        private int id=-1;
        
        @JsonProperty(value = "name")
        private String name;
        
        @JsonProperty(value = "description")
        private String description;
        
        @JsonProperty(value = "values")
        private List<InnerGroup> values;
    
        public int getId() {return id;}
        public void setId(int id) {this.id = id;}
    
        public String getName() {return name;}
        public void setName(String name) {this.name = name;}
    
        public String getDescription() {return description;}
        public void setDescription(String description) {this.description = description;}
    
        public List<InnerGroup> getValues() {return values;}
        public void setValues(List<InnerGroup> values) {this.values = values;}
    
      }//class closing
package org.test;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonIgnoreProperties(ignoreUnknown = true)
public class InnerGroup {
    
    @JsonProperty(value = "inner_group_id")
    private int id=-1;
    
    @JsonProperty(value = "removeclass_id")
    private List<Integer> removeClassIds;
    
    @JsonProperty(value = "addclass_id")
    private List<Integer> addClassIds;

    public int getId() {return id;}
    public void setId(int id) {this.id = id;}

    public List<Integer> getRemoveClassIds() {return removeClassIds;}
    public void setRemoveClassIds(List<Integer> removeClassIds) {this.removeClassIds = removeClassIds;}

    public List<Integer> getAddClassIds() {return addClassIds;}
    public void setAddClassIds(List<Integer> addClassIds) {this.addClassIds = addClassIds;}

}//class closing

Класс парсера

package org.test;

import java.io.File;
import java.io.FileInputStream;

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonParseTest {

    public static void main(String[] args) throws Exception{
        
        ObjectMapper mapper=new ObjectMapper();
        
        File jsonFile=new File("D:\\etc\\testworkspace\\ExpJavaProject\\etc\\str.json");
        try(FileInputStream fis=new FileInputStream(jsonFile)){
            
            GroupContainer container=mapper.readValue(fis, GroupContainer.class);
            
            //Test =================================
            System.out.println(container.getData());
            
            for(Group g:container.getData()) {

                System.out.println("Group Name --> "+g.getName());
                for(InnerGroup ig:g.getValues()) {
                    
                    System.out.println("\t\tInner Grp. ID --> "+ig.getId());
                    
                }//for closing
                
            }//for closing
            //END-Test =================================
            
        }catch(Exception e) {e.printStackTrace();}

    }//main closing

}//class closing

ПРИМЕЧАНИЕ: Добавьте JSON, указанный выше, в исходное сообщение в выбранном файле и измените путь соответственно в классе парсера для тестирования.

...