您的问题有一些隐含的部分,目前尚不清楚您在哪里遇到问题:
- 如何获取 JSON 字符串并从中生成可用的 Java 对象。(我假设是 Java,而不是 JavaScript,因为你已经用“java”标记了你的问题。)
- 制作完成后如何对这些物品进行分类?
- 您如何处理嵌套零件的排序?(在您的示例中,“idx-server”有子租户。)
不确定您到底遇到了哪些问题,所以这里有一些关于这三个方面的注意事项。
第 1 部分:获取 Java 对象
我同意另一个人的观点,Jackson是一个很好的 JSON 解析器。这里有几行代码可以用来解析一些 JSON:
String jsonString = "..."; // Load this in whatever way makes sense for you
ObjectMapper mapper = new ObjectMapper();
Map<String,Object> parsedJson = mapper.readValue(jsonString, Map.class);
如果您的 JSON 字符串真的很大,那么readValue
您可以使用其他重载来避免将整个字符串读入内存。
第 2 部分:对 Java 对象进行排序
一旦你得到了解析的 JSON,排序只是一个调用的问题Collections.sort(...)
,传入tenants
数组。另外,您需要编写一个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);
}
}
}
}
希望这可以帮助!