如何在java中对JSON对象进行排序?

如何在java中对JSON对象进行排序?,java,json,Java,Json,我已经寻找了一段时间,想要一种对JSON对象进行排序的方法,如下所示: {"results": [ { "layerId": 5, "layerName": "Pharmaceutical Entities", "attributes": { "OBJECTID": "35", "FACILITYTYPE": "Pharmacy", "FACILITYSUBTYPE": "24 Hr Pharmacy", "COMMER

我已经寻找了一段时间,想要一种对JSON对象进行排序的方法,如下所示:

{"results": [
  {
    "layerId": 5,
    "layerName": "Pharmaceutical Entities",
    "attributes": {
      "OBJECTID": "35",
      "FACILITYTYPE": "Pharmacy",
      "FACILITYSUBTYPE": "24 Hr Pharmacy",
      "COMMERCIALNAME_E": "SADD MAARAB PHARMACY"
      },
    "geometryType": "esriGeometryPoint",
   },
  {
    "layerId": 5,
    "layerName": "Pharmaceutical Entities",
    "attributes": {
      "OBJECTID": "1",
      "FACILITYTYPE": "Pharmacy",
      "FACILITYSUBTYPE": "24 Hr Pharmacy",
      "COMMERCIALNAME_E": "GAYATHY HOSPITAL  PHARMACY"
    },
    "geometryType": "esriGeometryPoint",
  },
     {
    "layerId": 5,
    "layerName": "Pharmaceutical Entities",
    "attributes": {
      "OBJECTID": "255",
      "FACILITYTYPE": "Pharmacy",
      "FACILITYSUBTYPE": "24 Hr Pharmacy",
      "COMMERCIALNAME_E": "AL DEWAN PHARMACY"
      },
    "geometryType": "esriGeometryPoint",
   }
]}
排序按“COMMERCIALNAME_E”值的字母顺序得到:


我找不到任何可以这样做的代码。有人能给我一些帮助吗?

将这些JSON解析为对象集合,并使用comparator使用首选字段对其进行排序

例如:

import com.google.gson.Gson;

class Person {
  private int age;
  private String name;
}

String json = "{'age':22,'name':'Jigar'}";
Gson gson = new Gson();
TestJsonFromObject obj = gson.fromJson(json, Person.class);  
如果要从对象创建JSON

Person p = new Person();
p.setName("Jigar");
p.setAge(22);
String jsonStr = new com.google.gson.Gson().toJson(obj);

您可以围绕JSON数组编写一个
列表
包装器,然后使用
集合。使用自定义的
比较器
排序

Boon提供JSON排序、搜索、筛选等功能

退房:

(布恩排序)

objectjsonobject=fromJson(json);
List jsonDepartments=(List)jsonObject;
列出jsonEmployees=(列表)索引(jsonDepartments,“employees”);
分类(雇员)//自然排序
排序(员工,“姓氏”)//按姓氏排序
排序(部门列表)//自然排序
分类(员工,分类(“部门名称”),
sortByDescending(“姓氏”),
sortBy(“名字”)//你明白了吗
分类(员工、,
排序(“contactInfo.PhoneNumber[0]”)//您甚至可以按路径表达式进行排序
分类(员工、,
sortByDescending(“contactInfo.PhoneNumber[0]”)//通过路径表达式向后
马克斯(雇员)//获取最大值(自然订单员工)
最大(员工5名)//获得前五名
民(雇员);//最低的
最少(5名雇员)//得到最低的五个
最高工资(雇员,“工资”)//获取最高工资员工
最大(员工,“工资”,5)//获取前五名受薪员工
min(员工,“工资”)//起码
最少(员工,“工资”,5)//最低的五名受薪员工

Boon也是目前JVM上最快的JSON解析器(大约2014年3月)

我使用JSON简单API对其进行排序。这是我的密码:

import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

public class SortJSON {

public static void main(String[] args) {
    JSONParser parser = new JSONParser();
    try {
        JSONObject o = (JSONObject) parser.parse(new FileReader("test3.json"));
        JSONArray array = (JSONArray) o.get("results");
        ArrayList<JSONObject> list = new ArrayList<>();

        for (int i = 0; i < array.size(); i++) {
            list.add((JSONObject) array.get(i));
        }
        Collections.sort(list, new MyJSONComparator());

        for (JSONObject obj : list) {
            System.out.println(((JSONObject) obj.get("attributes")).get("OBJECTID"));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

class MyJSONComparator implements Comparator<JSONObject> {

@Override
public int compare(JSONObject o1, JSONObject o2) {
    String v1 = (String) ((JSONObject) o1.get("attributes")).get("COMMERCIALNAME_E");
    String v3 = (String) ((JSONObject) o2.get("attributes")).get("COMMERCIALNAME_E");
    return v1.compareTo(v3);
}

}
导入java.io.FileReader;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.Comparator;
导入org.json.simple.JSONArray;
导入org.json.simple.JSONObject;
导入org.json.simple.parser.JSONParser;
公共类SortJSON{
公共静态void main(字符串[]args){
JSONParser=新的JSONParser();
试一试{
JSONObject o=(JSONObject)parser.parse(新文件读取器(“test3.json”);
JSONArray数组=(JSONArray)o.get(“结果”);
ArrayList=新建ArrayList();
对于(int i=0;i
我用杰克逊来做这件事。下面是排序方法的实现,您可能可以向其添加更多检查并添加返回类型

 public void sort(String data) throws IOException {
    JsonNode node = new ObjectMapper().readTree(data);
    ArrayNode array = (ArrayNode) node.get("results");
    Iterator<JsonNode> i =array.elements();
    List<JsonNode> list = new ArrayList<>();
    while(i.hasNext()){
        list.add(i.next());
    }
    list.sort(Comparator.comparing(o -> o.get("attributes").get("COMMERCIALNAME_E").asText()));
}
public void排序(字符串数据)引发IOException{
JsonNode node=newObjectMapper().readTree(数据);
ArrayNode数组=(ArrayNode)node.get(“结果”);
迭代器i=array.elements();
列表=新的ArrayList();
while(i.hasNext()){
添加(i.next());
}
list.sort(Comparator.comparing(o->o.get(“attributes”).get(“COMMERCIALNAME_E”).astex());
}

谢谢,但我在动态(调用web服务时)获取此对象。是否可以使用tostring()方法或其他任何方法将json对象转换为字符串?请提供帮助me@venkatesh如果您要求从对象创建JSON,那么可以使用
new com.google.gson.gson().toJson(obj)创建JSON谢谢,JSONObject obj=/**json对象数据**/然后字符串str=obj.toString();对吗?请解释清楚谢谢,我的最后一个问题是,例如object1是我的jsonobject,我可以直接将这个json对象转换成字符串类型吗?意思是字符串jsonstr=object1;但是您在我的项目中使用了一个类,该类的数据属于json对象。我动态地获取这些数据意味着数据可能每天都在变化。不可能每次都编写这种类型的类。对不起,我说的是英语。这绝对是个好答案。但我仍然会将json元素转换为Java对象(POJO),并使用比较器进行过滤/排序。我可以看到这种方法,比如说面向非生产的自动化测试,但是对于面向生产的代码,我会投入更多的精力并进行适当的域映射。我很难做到这一点,你的答案是时间的救星。谢谢
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

public class SortJSON {

public static void main(String[] args) {
    JSONParser parser = new JSONParser();
    try {
        JSONObject o = (JSONObject) parser.parse(new FileReader("test3.json"));
        JSONArray array = (JSONArray) o.get("results");
        ArrayList<JSONObject> list = new ArrayList<>();

        for (int i = 0; i < array.size(); i++) {
            list.add((JSONObject) array.get(i));
        }
        Collections.sort(list, new MyJSONComparator());

        for (JSONObject obj : list) {
            System.out.println(((JSONObject) obj.get("attributes")).get("OBJECTID"));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

class MyJSONComparator implements Comparator<JSONObject> {

@Override
public int compare(JSONObject o1, JSONObject o2) {
    String v1 = (String) ((JSONObject) o1.get("attributes")).get("COMMERCIALNAME_E");
    String v3 = (String) ((JSONObject) o2.get("attributes")).get("COMMERCIALNAME_E");
    return v1.compareTo(v3);
}

}
 public void sort(String data) throws IOException {
    JsonNode node = new ObjectMapper().readTree(data);
    ArrayNode array = (ArrayNode) node.get("results");
    Iterator<JsonNode> i =array.elements();
    List<JsonNode> list = new ArrayList<>();
    while(i.hasNext()){
        list.add(i.next());
    }
    list.sort(Comparator.comparing(o -> o.get("attributes").get("COMMERCIALNAME_E").asText()));
}