用java处理JSON数组
我有以下清单用java处理JSON数组,java,json,Java,Json,我有以下清单 [{ "frd": "2017-06-30", "tim": "2017-01-19T11:02:21.847", "tpr": 2276.5 }, { "frd": "2017-06-29", "tim": "2017-01-19T11:02:21.847", "tpr": 2408.5 }, { "frd": "2017-06-28", "tim": "2017-01-20T12:01:08.3
[{
"frd": "2017-06-30",
"tim": "2017-01-19T11:02:21.847",
"tpr": 2276.5
},
{
"frd": "2017-06-29",
"tim": "2017-01-19T11:02:21.847",
"tpr": 2408.5
},
{
"frd": "2017-06-28",
"tim": "2017-01-20T12:01:08.358",
"tpr": 2408.5
},
{
"frd": "2017-06-30",
"tim": "2017-01-20T12:01:08.358",
"tpr": 2276.5
},
{
"frd": "2017-06-30",
"tim": "2017-01-20T17:35:17.495",
"tpr": 2408.5
},
{
"frd": "2017-06-30",
"tim": "2017-01-19T10:04:44.586",
"tpr": 2276.5
},
{
"frd": "2017-06-30",
"tim": "2017-01-19T10:15:46.051",
"tpr": 2276.5
}]
我将从上述数据集创建一个多系列折线图。X轴变为tim值。Y轴变为tpr。行应按frd进行分组。因此,我试图获得一个新的json
,它是根据上述数据绘制图表所需的
我试图获得不同的tim值
Set<String> tims = new HashSet<String>();
for (Record record : array) {
tims.add(record.getTim());
}
List<String> sorted = new ArrayList<String>(tims);
Collections.sort(sorted);
已编辑
我试过跟随
Set<String> d_tims = new HashSet<String>();
for (Record record : array) {
d_tims.add(record.getTim());
}
List<String> sorted = new ArrayList<String>(d_tims);
Collections.sort(sorted);
List<Map<String, String>> tims = new ArrayList<Map<String, String>>();
for (String record : sorted) {
Map<String, String> map = new HashMap<String, String>();
map.put("tim", record);
for (Record record1 : array) {
if (record.equals(record1.getTim())){
map.put(record1.getFrd(), record1.getTpr().toString());
}
}
tims.add(map);
}
Set d_tims=new HashSet();
for(记录:数组){
d_tims.add(record.getTim());
}
列表排序=新数组列表(d_tims);
集合。排序(已排序);
List tims=new ArrayList();
for(字符串记录:已排序){
Map Map=newhashmap();
地图放置(“tim”,记录);
for(记录1:array){
if(record.equals(record1.getTim())){
put(record1.getFrd(),record1.getTpr().toString());
}
}
tims.add(地图);
}
然后我得到了我期望的json数组。如果还有比这更好的方法,请发帖子
谢谢如果您想使用Java 8和流式API,下面是代码:
final Record[] array = N.fromJSON(Record[].class, json); // Provided by open source library: AbacusUtil
// sorted by 'frd' and grouped by 'tim'
final Map<String, List<Record>> groupedByTim = Arrays.stream(array).sorted(Comparator.comparing(Record::getFrd))
.collect(Collectors.groupingBy(e -> e.getTim()));
final List<Map<String, String>> result = new ArrayList<>();
for (Map.Entry<String, List<Record>> entry : groupedByTim.entrySet()) {
Map<String, String> map = new LinkedHashMap<>();
map.put("tim", entry.getKey());
for (Record r : entry.getValue()) {
map.put(r.getFrd(), r.getTpr());
}
result.add(map);
}
N.println(N.toJSON(result, JSC.create().setPrettyFormat(true))); // Provided by open source library: AbacusUtil
以下是不带空值的输出:
[
{
"tim":"2017-01-19T10:15:46.051",
"2017-06-30":"2276.5"
},
{
"tim":"2017-01-20T17:35:17.495",
"2017-06-30":"2408.5"
},
{
"tim":"2017-01-19T11:02:21.847",
"2017-06-29":"2408.5",
"2017-06-30":"2276.5"
},
{
"tim":"2017-01-19T10:04:44.586",
"2017-06-30":"2276.5"
},
{
"tim":"2017-01-20T12:01:08.358",
"2017-06-28":"2408.5",
"2017-06-30":"2276.5"
}
]
转换为
列表
,并为列表中的每一个获取tim
@m\u callens请检查编辑部分。我尝试了List