Как правило, вы всегда можете сопоставить любой JSON
объект с Map<String, Object>
.Если JSON
сложен со многими вложенными объектами, Jackson
автоматически выберет правильный тип: Map
для объектов и List
для массивов.
Вы также можете объявить класс, как показано ниже, для Description
свойств,
class Description {
private String label;
private String description;
// getters, setters, toString
}
Целое Description
- это большое JSON
, которое вы можете сопоставить с Map<String, Description>
.Итак, это может выглядеть так:
class FieldDefinitions {
public static final String FIELDS = "Fields";
public static final String DESCRIPTION = "Description";
@JsonProperty(value = FIELDS, required = true)
private FieldDetails fields;
@JsonProperty(value = DESCRIPTION, required = true)
private Map<String, Description> descriptions;
// getters, setters, toString
}
Отдых такой же.Пример приложения:
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.util.List;
import java.util.Map;
public class JsonApp {
public static void main(String[] args) throws Exception {
File json = new File("./resource/test.json").getAbsoluteFile();
ObjectMapper mapper = new ObjectMapper();
FieldDefinitions fields = mapper.readValue(json, FieldDefinitions.class);
System.out.println("Required");
fields.getFields().getRequired().forEach(r ->
System.out.println(r + " = " + fields.getDescriptions().get(r)));
System.out.println("Optional");
fields.getFields().getOptional().forEach(r ->
System.out.println(r + " = " + fields.getDescriptions().get(r)));
}
}
Для заданных JSON
payload
отпечатков:
Required
ftp.hostname = Description{label='SFTP Hostname', description='SFTP server hostname or IP address'}
Optional
ftp.rootDirectory = Description{label='Root Directory', description='The root path on the Data Store accessible by this connector'}