JSONObject.parseObject(builder.toString()).getJSONArray("data");这个JSONArray中的元素有一个Key是orgId,请问有办法将Jsonarray转为以这个orgId为key的map
时间: 2024-03-19 08:46:29 浏览: 60
可以使用Java 8的Stream API和Collectors.toMap方法来实现。可以按照以下步骤:
1. 将JSONArray转换为List<Map<String, Object>>类型;
2. 使用Stream API将List中的每个Map转换为一个Entry对象,其中key为orgId,value为整个Map对象;
3. 使用Collectors.toMap将Entry对象收集到一个Map中,以orgId为key,整个Map对象为value。
具体代码如下:
```
List<Map<String, Object>> list = JSONObject.parseObject(builder.toString())
.getJSONArray("data").toJavaList(Map.class);
Map<String, Map<String, Object>> resultMap = list.stream()
.map(map -> new AbstractMap.SimpleEntry<>((String) map.get("orgId"), map))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
System.out.println(resultMap);
```
这样就可以得到以orgId为key的Map了。
相关问题
JSONObject jsonObject = JSONObject.parseObject(Arrays.toString(bytes));报错 JSONObject jsonObject = JSONObject.parseObject(Arrays.toString(bytes));
`JSONObject.parseObject()`方法需要传入一个JSON字符串作为参数,但是`Arrays.toString()`方法是将一个数组转换成一个字符串,并不是将一个字节数组转换成一个JSON字符串。
如果您已经确定您所接收到的字节数组是一个JSON字符串的字节数组,可以直接将其转换为字符串,然后再使用`JSONObject.parseObject()`方法进行解析,例如:
```java
String jsonString = new String(bytes, StandardCharsets.UTF_8);
JSONObject jsonObject = JSONObject.parseObject(jsonString);
```
其中,`bytes`是您所接收到的字节数组,`StandardCharsets.UTF_8`是指定字符串编码格式的常量。通过将字节数组转换为字符串,再使用`JSONObject.parseObject()`方法解析该字符串,就可以得到一个`JSONObject`对象。
JSONArray data = JSONObject.parseObject(builder.toString()).getJSONArray("data"); data数组里面每个元素都有一个USER_ID字段,data数组中可能存在有多条USER_ID一样的数据,这种情况下就筛选data中JOB_TYPE = 10的数据作为唯一的数据.这个该如何实现呢
可以按照以下步骤实现:
1. 首先,将所有数据按照USER_ID进行分组,将同一USER_ID的数据放入同一个List中,并将这些List存入一个Map中。
2. 遍历Map中的每个List,如果该List中只有一条数据,则将该数据作为唯一的数据;如果该List中有多条数据,则需要筛选出JOB_TYPE为10的数据作为唯一的数据。
3. 筛选JOB_TYPE为10的数据时,可以通过遍历List,依次判断每条数据的JOB_TYPE是否为10,如果是则将其设为唯一的数据,然后跳出循环;如果没有找到JOB_TYPE为10的数据,则将第一条数据设为唯一的数据。
以下是示例代码:
```java
Map<String, List<JSONObject>> userDataMap = new HashMap<>();
JSONArray dataArray = JSONObject.parseObject(builder.toString()).getJSONArray("data");
for (int i = 0; i < dataArray.size(); i++) {
JSONObject userData = dataArray.getJSONObject(i);
String userId = userData.getString("USER_ID");
if (!userDataMap.containsKey(userId)) {
userDataMap.put(userId, new ArrayList<>());
}
userDataMap.get(userId).add(userData);
}
List<JSONObject> uniqueDataList = new ArrayList<>();
for (List<JSONObject> userList : userDataMap.values()) {
JSONObject uniqueData;
if (userList.size() == 1) {
uniqueData = userList.get(0);
} else {
uniqueData = userList.get(0);
for (JSONObject userData : userList) {
if (userData.getIntValue("JOB_TYPE") == 10) {
uniqueData = userData;
break;
}
}
}
uniqueDataList.add(uniqueData);
}
```
注意,以上代码仅为示例,具体实现可能需要根据实际情况进行修改。
阅读全文