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