Java 使用GSON按变量键对JsonArray排序
我试图使用GSON对Java中的JsonArray进行排序,我希望通过一个变量键对该数组中的所有内容进行排序,这意味着在某个地方有一个字符串,其中包含对象需要排序的键 关键变量:varkey1Java 使用GSON按变量键对JsonArray排序,java,json,object,gson,Java,Json,Object,Gson,我试图使用GSON对Java中的JsonArray进行排序,我希望通过一个变量键对该数组中的所有内容进行排序,这意味着在某个地方有一个字符串,其中包含对象需要排序的键 关键变量:varkey1 [{"varkey1":1,"othervarkey":1},{"varkey1":6,"othervarkey":2},{"varkey1":3,"othervarkey":3},{"varkey1":12,"othervarkey":4},{"varkey1":998,"othervarkey":5}
[{"varkey1":1,"othervarkey":1},{"varkey1":6,"othervarkey":2},{"varkey1":3,"othervarkey":3},{"varkey1":12,"othervarkey":4},{"varkey1":998,"othervarkey":5}]
所以应该是这样的:
[{"varkey1":1,"othervarkey":1},{"varkey1":3,"othervarkey":2},{"varkey1":6,"othervarkey":3},{"varkey1":12,"othervarkey":4},{"varkey1":998,"othervarkey":5}]
请尝试以下操作:-
String jsonListString = "[{\"varkey1\":1,\"othervarkey\":1},{\"varkey1\":6,\"othervarkey\":2},{\"varkey1\":3,\"othervarkey\":3},{\"varkey1\":12,\"othervarkey\":4},{\"varkey1\":998,\"othervarkey\":5}]";
JSONArray jsonArray = new JSONArray(jsonListString);
// Create Java ArrayList from JSON Array
ArrayList<JSONObject> array = new ArrayList<JSONObject>();
for (int i = 0; i < jsonArray.length(); i++) {
try {
array.add(jsonArray.getJSONObject(i));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// Sort the Java Array List
Collections.sort(array, new Comparator<JSONObject>() {
@Override
public int compare(JSONObject lhs, JSONObject rhs) {
// TODO Auto-generated method stub
try {
return (lhs.getInt("varkey1").compareTo(rhs.getInt("varkey1")));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return 0;
}
}
});
// convert Java Array List to JSON Array and then to String representation.
jsonArray = new JSONArray(array);
jsonListString = jsonArray.toString();
String jsonListString=“[{\'varkey1\':1,\'othervarkey\':1},{\'varkey1\':6,\'othervarkey\':2},{\'varkey1\':3,\'othervarkey\':3},{\'varkey1\':12,\'othervarkey\':4},{\'varkey1\':998,\'othervarkey\':5}];
JSONArray JSONArray=新的JSONArray(jsonListString);
//从JSON数组创建Java ArrayList
ArrayList数组=新的ArrayList();
for(int i=0;i
此代码:-
您可以实现一个排序算法,该算法可以专门用于Gson
JsonElement
s。
如果没有,您可以重新使用标准的集合。sort(…)
来完成这项工作。
出于某种原因,JsonArray
实现了Iterable
而不是List
,后者可以通过Collection.sort
进行排序。
因此,需要一个自定义的JsonArray
-to-列表
:
final类JsonArrayList
扩展抽象列表{
私人最终JsonArray JsonArray;
私有JsonArray列表(最终JsonArray JsonArray){
this.jsonArray=jsonArray;
}
静态列表(最终JsonArray JsonArray){
返回新的JsonArrayList(jsonArray);
}
//实现AbstractList时需要此方法
@凌驾
公共JsonElement get(最终整数索引){
返回jsonArray.get(索引);
}
//实现AbstractList时也需要此方法
@凌驾
公共整数大小(){
返回jsonArray.size();
}
//这是使列表实现可修改所必需的
@凌驾
公共JsonElement集(最终int索引,最终JsonElement元素){
返回jsonArray.set(索引,元素);
}
}
现在,剩下的很简单:
//甚至不需要Gson实例化
final-JsonArray-JsonArray=new-JsonParser()
.parse(jsonReader)
.getAsJsonArray();
//创建列表视图实例的JsonArray
最终列表jsonElements=JsonArrays.asList(jsonArray);
//对jsonElements对象进行排序
Collections.sort(jsoneelements,(e1,e2)->{
final int i1=e1.getAsJsonObject().get(“varkey1”).getAsInt();
final int i2=e2.getAsJsonObject().get(“varkey1”).getAsInt();
返回整数。比较(i1,i2);
});
由于
jsonElements
只是jsonArray
的一个视图,jsonArray
实际上是被排序的。我在谷歌上查找过,什么都找不到。