JsonArray根据对象某个字段的首字母进行排序

我想根据这个JsonArray里面对象的“name”字段的值按照首字母排序。

img

参考GPT的回答内容和自己的思路,可以通过以下步骤实现根据JsonArray对象中的"name"字段按首字母排序:

1.将JsonArray对象转换为List类型,这样更容易进行排序。
2.使用Comparator和Collections.sort()方法来按照"name"字段排序。
3.将排序后的List对象转换回JsonArray对象。
下面是实现的代码:

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.*;

public class Main {
    public static void main(String[] args) {
        String jsonString = "[{\"name\":\"MST_Ns\",\"versionlist\":[{\"createDate\":\"2022-11-23 16:21:58\"}]},{\"name\":\"AST_Ns\",\"versionlist\":[{\"createDate\":\"2022-01-26 16:32:41\"}]}]";

        JSONArray jsonArray = new JSONArray(jsonString);
        List<JSONObject> list = new ArrayList<>();

        // 将JsonArray对象转换为List类型
        for (int i = 0; i < jsonArray.length(); i++) {
            list.add(jsonArray.getJSONObject(i));
        }

        // 使用Comparator和Collections.sort()方法来按照"name"字段排序
        Collections.sort(list, new Comparator<JSONObject>() {
            @Override
            public int compare(JSONObject o1, JSONObject o2) {
                String name1 = o1.getString("name");
                String name2 = o2.getString("name");
                return name1.compareTo(name2);
            }
        });

        // 将排序后的List对象转换回JsonArray对象
        JSONArray sortedJsonArray = new JSONArray(list);
        System.out.println(sortedJsonArray.toString());
    }
}

运行后,输出结果为:

[{"name":"AST_Ns","versionlist":[{"createDate":"2022-01-26 16:32:41"}]},{"name":"MST_Ns","versionlist":[{"createDate":"2022-11-23 16:21:58"}]}]

回答不易,还请采纳!!!



```java
JSONObject.parseArray(jsonarray).stream()
                        .sorted(Comparator.comparing(data -> ((JSONObject) data).getString("name")))
                        .collect(Collectors.toList());

```

参考GPT和自己的思路:你可以使用JavaScript的sort()方法来排序JsonArray中的对象。可以使用localCompare()方法将字符串进行排序。

这里是一个示例代码:

const jsonArray = [
  {
    "name": "MST Ns",
    "versionlist": [
      {
        "createDate": "2022-11-23 16:21:58"
      }
    ]
  },
  {
    "name": "AST Ns",
    "versionlist": [
      {
        "createDate": "2022-01-26 16:32:41"
      }
    ]
  }
];

jsonArray.sort(function(a, b) {
  const nameA = a.name.charAt(0).toUpperCase();
  const nameB = b.name.charAt(0).toUpperCase();
  
  if (nameA < nameB) {
    return -1;
  }
  if (nameA > nameB) {
    return 1;
  }

  return 0;
});

console.log(jsonArray);


输出结果如下:

[  {    "name": "AST Ns",    "versionlist": [      {        "createDate": "2022-01-26 16:32:41"      }    ]
  },
  {
    "name": "MST Ns",
    "versionlist": [
      {
        "createDate": "2022-11-23 16:21:58"
      }
    ]
  }
]


此示例假定所有名称都是大写字母。如果名称包含小写字母,可以使用name.toUpperCase()来将它们转换为大写字母。

“Devil组”引证GPT后的撰写:

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.Comparator;

public class SortJsonArray {

    public static void main(String[] args) {
        JSONArray jsonArray = new JSONArray("[\n" +
                "  {\n" +
                "    \"name\": \"MST Ns\",\n" +
                "    \"versionlist\": [\n" +
                "      {\n" +
                "        \"createDate\": \"2022-11-23 16:21:58\"\n" +
                "      }\n" +
                "    ]\n" +
                "  },\n" +
                "  {\n" +
                "    \"name\": \"AST Ns\",\n" +
                "    \"versionlist\": [\n" +
                "      {\n" +
                "        \"createDate\": \"2022-01-26 16:32:41\"\n" +
                "      }\n" +
                "    ]\n" +
                "  }\n" +
                "]");
        
        jsonArray.sort(new Comparator<Object>() {
            @Override
            public int compare(Object o1, Object o2) {
                JSONObject jsonObject1 = (JSONObject) o1;
                JSONObject jsonObject2 = (JSONObject) o2;

                String name1 = jsonObject1.getString("name");
                String name2 = jsonObject2.getString("name");

                char c1 = name1.charAt(0);
                char c2 = name2.charAt(0);

                return Character.compare(c1, c2);
            }
        });

        System.out.println(jsonArray.toString());
    }
}

用java


package com.xiao.nettyStudy.test;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;

/**
 * @author xsj
 * @date 2023/3/10 10:33
 */
public class Test {

    public JSONArray compare(JSONArray jsonArray, String key) {
        JSONArray array = new JSONArray();
        for (int i = 0; i < jsonArray.size(); i++) {
            for (int j = i + 1; j < jsonArray.size(); j++) {
                String value1 = JSON.parseObject(jsonArray.get(i).toString()).getString(key);
                String value2 = JSON.parseObject(jsonArray.get(j).toString()).getString(key);
                if (value1.compareTo(value2) > 0){
                    array.add(jsonArray.get(i));
                    jsonArray.set(i,jsonArray.get(j));
                    jsonArray.set(j,array.get(0));
                }
            }
        }
        return jsonArray;
    }

    public static void main(String[] args) {
        JSONArray jsonArray = JSON.parseArray("[{\n" +
                "    \"name\": \"MST Ns\",\n" +
                "    \"versionlist\": [\n" +
                "      {\n" +
                "        \"createDate\": \"2022-11-23 16:21:58\"\n" +
                "      }\n" +
                "    ]\n" +
                "  },\n" +
                "  {\n" +
                "    \"name\": \"AST Ns\",\n" +
                "    \"versionlist\": [\n" +
                "      {\n" +
                "        \"createDate\": \"2022-01-26 16:32:41\"\n" +
                "      }\n" +
                "    ]\n" +
                "  }\n" +
                "]");
        System.out.println("排序前"+jsonArray.toString());
        Test test = new Test();
        JSONArray jsonArray1 = test.compare(jsonArray,"name");
        System.out.println("排序后"+jsonArray1.toString());
    }
}

假设要按照 JSON 数组中的 name 字段的首字母进行排序,可以使用 Java 中的 Comparator 接口和 Collections 类的 sort 方法。以下是示例代码:

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Collections;

public class Main {
    public static void main(String[] args) {
        String jsonArray = "[{\"name\":\"MST Ns\",\"versionlist\":[{\"createDate\":\"2022-11-23 16:21:58\"}]},{\"name\":\"AST Ns\",\"versionlist\":[{\"createDate\":\"2022-01-26 16:32:41\"}]}]";

        List<JsonData> dataList = new ArrayList<>();

        // 使用 Jackson 将 JSON 字符串转换为 Java 对象
        ObjectMapper mapper = new ObjectMapper();
        try {
            JsonNode rootNode = mapper.readTree(jsonArray);
            for (JsonNode node : rootNode) {
                String name = node.get("name").asText();
                JsonNode versionList = node.get("versionlist");
                JsonNode versionNode = versionList.get(0);
                String createDate = versionNode.get("createDate").asText();
                JsonData jsonData = new JsonData(name, createDate);
                dataList.add(jsonData);
            }

            // 使用 Comparator 比较器按照 name 字段的首字母进行排序
            Collections.sort(dataList, Comparator.comparing(JsonData::getName));

            // 打印排序后的结果
            for (JsonData data : dataList) {
                System.out.println(data.getName() + " " + data.getCreateDate());
            }

        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
}

class JsonData {
    private String name;
    private String createDate;

    public JsonData(String name, String createDate) {
        this.name = name;
        this.createDate = createDate;
    }

    public String getName() {
        return name;
    }

    public String getCreateDate() {
        return createDate;
    }
}


以下答案由GPT-3.5大模型与博主波罗歌共同编写:
可以使用Java提供的Collections.sort方法和Comparator接口实现按照首字母排序。具体实现方式如下:

假设有如下的JsonArray:

[
  {
    "name": "apple",
    "quantity": 10
  },
  {
    "name": "banana",
    "quantity": 20
  },
  {
    "name": "tomato",
    "quantity": 15
  }
]

首先,定义一个Comparator接口的实现类,用来对JsonArray中的元素进行排序:

import java.util.Comparator;
import com.alibaba.fastjson.JSONObject;

public class JsonArrayComparator implements Comparator<JSONObject> {
    @Override
    public int compare(JSONObject o1, JSONObject o2) {
        // 获取name字段的值,并取出首字母进行比较
        String name1 = o1.getString("name");
        String name2 = o2.getString("name");
        return Character.compare(name1.charAt(0), name2.charAt(0));
    }
}

接着,使用Collections.sort对JsonArray进行排序:

import java.util.Collections;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class JsonArraySorter {
    public static void main(String[] args) {
        // 假设有如下的JsonArray
        JSONArray jsonArray = JSONArray.parseArray("[{\"name\":\"apple\",\"quantity\":10},{\"name\":\"banana\",\"quantity\":20},{\"name\":\"tomato\",\"quantity\":15}]");

        // 对JsonArray按照name字段的首字母排序
        Collections.sort(jsonArray, new JsonArrayComparator());

        // 输出排序后的JsonArray
        System.out.println(jsonArray.toJSONString());
    }
}

输出结果如下所示:

[{"name":"apple","quantity":10},{"name":"banana","quantity":20},{"name":"tomato","quantity":15}]

如果我的回答解决了您的问题,请采纳!

试试这个


    String jsonArrStr ="[ { "ID": "135", "Name": "Fargo Chan" },{ "ID": "432", "Name": "Aaron Luke" },{ "ID": "252", "Name": "Dilip Singh" }]";

    JSONArray jsonArr = new JSONArray(jsonArrStr);
    JSONArray sortedJsonArray = new JSONArray();

    List<JSONObject> jsonValues = new ArrayList<JSONObject>();
    for (int i = 0; i < jsonArr.length(); i++) {
        jsonValues.add(jsonArr.getJSONObject(i));
    }
    Collections.sort( jsonValues, new Comparator<JSONObject>() {
        private static final String KEY_NAME ="Name";

        @Override
        public int compare(JSONObject a, JSONObject b) {
            String valA = new String();
            String valB = new String();

            try {
                valA = (String) a.get(KEY_NAME);
                valB = (String) b.get(KEY_NAME);
            }
            catch (JSONException e) {
                
            }

            return valA.compareTo(valB);
        }
    });

    for (int i = 0; i < jsonArr.length(); i++) {
        sortedJsonArray.put(jsonValues.get(i));
    }