Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用GSON按变量键对JsonArray排序_Java_Json_Object_Gson - Fatal编程技术网

Java 使用GSON按变量键对JsonArray排序

Java 使用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}

我试图使用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":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
此代码:-

  • 从字符串创建JSONArray

  • 从JSONArray创建Java ArrayList

  • 使用Collections.Sort()对Java ArrayList进行排序

  • 然后从JavaArrayList创建JSONArray

  • 然后以JSON字符串表示形式返回JSONArray


  • 您可以实现一个排序算法,该算法可以专门用于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
    实际上是被排序的。

    我在谷歌上查找过,什么都找不到。