이 질문에 대한 암시 몇 가지 부분, 그리고 그것은 당신이하는 데 문제가있는 경우 분명하지 않다 : 당신이 JSON 문자열을 가지고 사용할 수있는 자바 그것의 개체를 어떻게해야합니까
- . (당신이 "java"로 질문을 태그했기 때문에 자바 스크립트가 아닌 자바라고 가정합니다.)
- 이 오브젝트들은 어떻게 만들어 졌습니까?
- 중첩 된 부분 정렬은 어떻게 처리합니까? (귀하의 예에서 "idx-server"에는 하위 테넌트가 있습니다.)
이 부분에서 문제가있는 부분을 정확하게 알지 못하므로 여기에 3 가지 노트가 있습니다.
1 부 : 자바를 얻기는
내가
Jackson을 사용하는 것이 JSON 파서는 것을 다른 사람에 동의
객체. 다음은 몇 가지 JSON을 구문 분석하는 데 사용할 수있는 코드 몇 줄의 :
당신의 JSON 문자열이 정말 큰 경우, 당신은 메모리에 전체 문자열을 읽는 방지하기 위해 사용할 수있는 다른
readValue
과부하가
String jsonString = "..."; // Load this in whatever way makes sense for you
ObjectMapper mapper = new ObjectMapper();
Map<String,Object> parsedJson = mapper.readValue(jsonString, Map.class);
.
제 2 부 : 당신은 구문 분석 JSON을했으면 정렬 자바
객체, 정렬은 tenants
배열을 전달, Collections.sort(...)
를 호출의 문제이다. 또한 원하는 순서를 정의하는 Comparator을 작성해야합니다.
public class NameComparator implements Comparator<Map<String,Object>> {
public int compare(Map<String,Object> o1, Map<String,Object> o2) {
String name1 = (String) o1.get("name");
String name2 = (String) o2.get("name");
return name1.compareTo(name2);
}
}
는 그런 다음 세입자 배열을 얻을 수 (잭슨
ArrayList
객체로한다) 및
Collections.sort(...)
전화 : 예를 들어, 다음 이름으로 정렬 비교기입니다. 예를 들어,
List<Map<String,Object>> tenants =
(List<Map<String,Object>>) parsedJson.get("tenants");
Collections.sort(tenants, new NameComparator());
3 부 :이 작업을 수행 할 수있는 중첩
가장 분명한 방법으로 처리는 세입자의 배열 개체를 찾고 당신의 JSON을 통해 도보로 몇 가지 여분의 코드를 추가하고 정렬 할 수 있습니다. 예를 들어 다음과 같은 재귀 함수가 있습니다.
public static void recursiveSortTenants(Map<String,Object> jsonObject) {
List<Map<String,Object>> tenants =
(List<Map<String,Object>>) jsonObject.get("tenants");
if (tenants != null) {
Collections.sort(tenants, new NameComparator());
// For each tenant, see if it has sub-tenants. If so,
// call this function again to sort them.
for (Map<String,Object> tenant : tenants) {
if (tenants.containsKey("tenants")) {
recursiveSortTenants(tenant);
}
}
}
}
희망이 있습니다.