java - 按 ID 对 JSON 数组进行排序
问题描述
我编写的代码采用包含 JSON 数据的字符串。我正在按 ID 对 JSON 对象数组进行排序。当我使用我的方法时,我得到了这个异常:“org.json.JSONException:JSONArray 文本必须以 '[' at 1 [character 2 line 1]”开头。
我在这里缺少什么以及如何解决它?
private static void ResortJsonByUseCaseID( String jsonArrStr )
{
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));
}
java.util.Collections.sort( jsonValues, new java.util.Comparator<JSONObject>() {
private static final String KEY_NAME = "useCaseId";
@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) {
//do something
int tal = 9;
}
return valA.compareTo(valB);
}
});
for (int i = 0; i < jsonArr.length(); i++) {
sortedJsonArray.put(jsonValues.get(i));
}
jsonArrStr = sortedJsonArray.toString();
}
解决方案
您描述的代码仅适用于看起来像这样的 json:
[
{ "useCaseId" : "4", ... },
{ "useCaseId" : "1", ... },
{ "useCaseId" : "a", ... },
...
]
如您所见,字符串以[
字符开头,就像要求的异常一样。
由于“大多数” json 开头{
我猜你的 json 结构是不同的,然后你需要相应地调整你的代码。例如,如果您的 json 数组嵌入到像“大多数” json 这样的对象中:
{
"useCases" : [
{ "useCaseId" : "4", ... },
{ "useCaseId" : "1", ... },
{ "useCaseId" : "a", ... },
...
]
}
那么您必须创建 aJSONObject obj = new JSONObject(jsonArrStr)
然后JSONArray
通过调用(JSONArray)obj.get("useCases")
.
推荐阅读
- android - 解析单值 JSON 对象
- python - ModelSerializer 不尊重字段的 required 属性
- java - 已建立的连接被 Tomcat 8 上主机中的软件中止
- reactjs - saga 在更新 redux 状态时挂起
- python - 双向 LSTM:准确度从 1% 开始下降到 0.01%
- c# - WPF - DataGrid - 单击其他任何位置时动态添加的控件消失
- docker - Docker挂载顺序乱序,不让我挂载我的目录
- c# - Asp.Net Web Api 任务死锁
- php - 我应该在哪里放置一个新的 sql 查询函数 Symfony 3
- wordpress - 如何在 Woocommerce 订单列表中更改批量操作订单