对象的array
Statement:[
{
"date": "12-09-19 11:02:47",
"Country": "Bangladesh",
"Profession": "X",
"Salary": "100",
},
{
"date": "12-09-19 11:02:47",
"Country": "Bangladesh",
"Profession": "Y",
"Salary": "101",
},
{
"date": "12-09-19 11:02:47",
"Country": "Bangladesh",
"Profession": "Z",
"Salary": "102",
},
{
"date": "11-09-19 11:02:47",
"Country": "India",
"Profession": "I",
"Salary": "103",
},
{
"date": "11-09-19 11:02:47",
"Country": "India",
"Profession": "J",
"Salary": "104",
},
{
"date": "10-09-19 11:02:47",
"Country": "Nepal",
"Profession": "N",
"Salary": "105",
},
{
"date": "10-09-19 11:02:47",
"Country": "Nepal",
"Profession": "M",
"Salary": "106",
}
]
我正在尝试创建一个新的array
,它将创建一个object
,并且每个日期(作为键)和其他信息都位于同一object
中。
新数组应如下所示:
"10-09-19": [
{
"Country": "Nepal",
"Profession": "M",
"Salary": "106",
},
{
"Country": "Nepal",
"Profession": "N",
"Salary": "105",
}
],
"11-09-19": [{
"Country": "India",
"Profession": "J",
"Salary": "104",
},
{
"Country": "India",
"Profession": "I",
"Salary": "103",
}
],
"12-09-19": [{
"Country": "Bangladesh",
"Profession": "x",
"Salary": "104",
},
{
"Country": "Bangladesh",
"Profession": "y",
"Salary": "103",
},
{
"Country": "Bangladesh",
"Profession": "z",
"Salary": "102",
}
]
答案 0 :(得分:0)
您可以使用Java 8 group by。希望下面的代码对您有帮助
Map<String, List<Pojo>> groupedList =
list.stream().collect(Collectors.groupingBy(Pojo::getDate, Collectors.toList()));
答案 1 :(得分:0)
使用哈希图明智地存储数据。 hashmap的键将是date。 这是我的代码,它可以帮助您理解逻辑。
var sortedList= HashMap<String, MutableList<Model>>() // create hashmap to store data
var temp: MutableList<Model>? = ArrayList<Model>()
for (item in currentList!!) {
temp = sortedList?.get(item.date.split(" ").get(0)) // get date and remove timing
if (temp != null) //if this is not null it mean this contain items
temp.add(item)
else {
temp = ArrayList<Model>() //if this is null it means this is new data or new data
temp.add(item)
}
sortedList?.put(item.date.split(" ").get(0), temp)
}
我的代码在kotlin中对此表示抱歉。 编码愉快。
答案 2 :(得分:0)
首先循环数组以获取日期。 创建日期的JSONArray,如下所示。
fillRect()
//在添加所需对象的同时遍历数组
JSONArray jsonArray = new JSONArray("date");
答案 3 :(得分:0)
我假设您提供的都是JSON字符串(但它们看起来无效),那么您可以按以下方式实现转换:
ObjectMapper mapper = new ObjectMapper();
ObjectNode root = (ObjectNode) mapper.readTree(jsonStr);
ObjectNode rootNew = mapper.createObjectNode();
for (int i = 0; i < root.get("Statement").size(); i++) {
String date = root.get("Statement").get(i).get("date").asText().split(" ")[0];
ObjectNode node = (ObjectNode) ((ObjectNode) root.get("Statement").get(i));
node.remove("date");
if (rootNew.has(date)) {
((ArrayNode) rootNew.get(date)).add(node);
} else {
rootNew.put(date, mapper.createArrayNode().add(node));
}
}
System.out.println(rootNew.toString());
控制台输出:
{
"12-09-19":[
{
"Country":"Bangladesh",
"Profession":"X",
"Salary":"100"
},
{
"Country":"Bangladesh",
"Profession":"Y",
"Salary":"101"
},
{
"Country":"Bangladesh",
"Profession":"Z",
"Salary":"102"
}
],
"11-09-19":[
{
"Country":"India",
"Profession":"I",
"Salary":"103"
},
{
"Country":"India",
"Profession":"J",
"Salary":"104"
}
],
"10-09-19":[
{
"Country":"Nepal",
"Profession":"N",
"Salary":"105"
},
{
"Country":"Nepal",
"Profession":"M",
"Salary":"106"
}
]
}
答案 4 :(得分:0)
首先,谢谢大家回答我的问题。我有一个解决方案,后来找到了。我想我应该和你们分享。
JSONArray statementArray = response.getJSONArray("statement");
Map<String, List<String>> map= new HashMap<String, List<String>>();
for(int i = 0; i < statementArray.length(); i ++) {
JSONObject mJsonObjectStatement = statementArray.getJSONObject(i);
String date= mJsonObjectStatement.getString("date").split(" ")[0];
List<String> valSet = new ArrayList<String>();
valSet.add(0,mJsonObjectStatement.getString("Country"));
valSet.add(1,mJsonObjectStatement.getString("Profession"));
valSet.add(2,mJsonObjectStatement.getString("Salary"));
map.put(date,valSet);
}
for (Map.Entry<String, List<String>> entry : transactionReportMap.entrySet()) {
String key = entry.getKey();
List<String> values = entry.getValue();
Log.e("Key = " , key);
Log.e("Values = " , values + "n");
}
Log.e("Result:",map.toString());
上述解决方案无法提供相同的结果,但可以达到我的目的。
我找到了另一个解决方案
JSONArray statementArray = response.getJSONArray("statement");
ObjectMapper mapper = new ObjectMapper();
Map<String, List<String>> map= new HashMap<String, List<String>>();
for(int i = 0; i < statementArray.length(); i ++) {
JSONObject mJsonObjectStatement = statementArray.getJSONObject(i);
String date= mJsonObjectStatement.getString("date").split(" ")[0];
if (transactionReportMap.containsKey(date)) {
map.get(date).add(date);
} else {
ArrayList<String> infoList = new ArrayList<String>();
infoList.add(mJsonObjectStatement.getString("Country"));
infoList.add(mJsonObjectStatement.getString("Profession"));
infoList.add(mJsonObjectStatement.getString("Salary"));
map.put(date, infoList);
}
}
StringWriter result = new StringWriter();
try {
mapper.writeValue(result, map);
} catch (IOException e) {
e.printStackTrace();
}
Log.e("Result: ",result+"");