Java 复制Json数组的对象并显示具有相同参数的对象
我有一个包含四个对象的json数组Java 复制Json数组的对象并显示具有相同参数的对象,java,json,Java,Json,我有一个包含四个对象的json数组 {"name":"Ram", "email":"ram@gmail.com", "age":23}, {"name":"Shyam", "email":"shyam23@gmail.com", "age":28}, {"name":"John", "email":"john@gmail.com", "age":23}, {"name":"Bob", "email":"bob32@gmail.com", "age":41} 我希望遍历jso
{"name":"Ram", "email":"ram@gmail.com", "age":23},
{"name":"Shyam", "email":"shyam23@gmail.com", "age":28},
{"name":"John", "email":"john@gmail.com", "age":23},
{"name":"Bob", "email":"bob32@gmail.com", "age":41}
我希望遍历json对象并显示同龄人员的详细信息。我正在使用Java。
我是json新手。有人能建议如何继续吗。我正在使用json.org库
我已经走了这么远:
public static void main(String[] args) {
String text="{\"name\":\"Ram\", \"email\":\"ram@gmail.com\", \"age\":23}"
+ "{\"name\":\"Shyam\", \"email\":\"shyam23@gmail.com\", \"age\":28}"
+ "{\"name\":\"John\", \"email\":\"john@gmail.com\", \"age\":23}"
+ "{\"name\":\"Bob\", \"email\":\"bob32@gmail.com\", \"age\":41}";
String changed=text.toString();
int pos=changed.lastIndexOf("}");
String change=changed.substring(0,pos );
change=change.replace("}", "},");
String res=change.concat("}");
String msg="["+res+"]";
JSONArray json=new JSONArray(msg);
for(int i=0;i<json.length();i++){
JSONObject obj= json.getJSONObject(i);
}
}
publicstaticvoidmain(字符串[]args){
String text=“{\”name\”:\“Ram\”,\“email\”:\”ram@gmail.com\“,\”年龄\“:23}”
+“{\'name\':\'Shyam\',\'email\':\”shyam23@gmail.com\“,”年龄\“:28}”
+“{\'name\':\'John\',\'email\':\”john@gmail.com\“,\”年龄\“:23}”
+{\'name\':\'Bob\',\'email\':\'bob32@gmail.com\“,”年龄\“:41}”;
字符串已更改=text.toString();
int pos=changed.lastIndexOf(“}”);
字符串更改=已更改。子字符串(0,位置);
change=change.replace(“}”,“}”);
字符串res=change.concat(“}”);
字符串msg=“[”+res+“]”;
JSONArray json=新JSONArray(msg);
对于(int i=0;i,这个问题实际上包含两个部分:
如何正确解析JSON?有很多方法,例如Gson、Jackson或JsonP……而且您还可以选择是将JSON解析为通用JSON对象还是特定的POJO。创建一个POJO类来解析它可以简化步骤#2
为了处理“显示同龄人的详细信息”,我建议使用Java8的流特性来处理,只需一行代码
List<Person> people = parseJson(text); // depend on which lib you choose.
// Group person by age.
Map<Int, List<Person>> peobleByAge = people.stream().collect(Collectors.groupingBy(Person::getAge));
List people=parseJson(text);//取决于您选择的库。
//按年龄分组。
Map peoplebyage=people.stream().collect(Collectors.groupingBy(Person::getAge));
这个问题实际上包括两个部分:
如何正确解析JSON?有很多方法,例如Gson、Jackson或JsonP……而且您还可以选择是将JSON解析为通用JSON对象还是特定的POJO。创建一个POJO类来解析它可以简化步骤#2
为了处理“显示同龄人的详细信息”,我建议使用Java8的流特性来处理,只需一行代码
List<Person> people = parseJson(text); // depend on which lib you choose.
// Group person by age.
Map<Int, List<Person>> peobleByAge = people.stream().collect(Collectors.groupingBy(Person::getAge));
List people=parseJson(text);//取决于您选择的库。
//按年龄分组。
Map peoplebyage=people.stream().collect(Collectors.groupingBy(Person::getAge));
公共类JSON{
公共空间更改(){
String text=“{\”name\”:\“Ram\”,\“email\”:\”ram@gmail.com\“,\”年龄\“:23}”
+“{\'name\':\'Shyam\',\'email\':\”shyam23@gmail.com\“,”年龄\“:28}”
+“{\'name\':\'John\',\'email\':\”john@gmail.com\“,\”年龄\“:23}”
+{\'name\':\'Bob\',\'email\':\'bob32@gmail.com\“,”年龄\“:41}”;
字符串已更改=text.toString();
int pos=changed.lastIndexOf(“}”);
字符串更改=已更改。子字符串(0,位置);
change=change.replace(“}”,“}”);
字符串res=change.concat(“}”);
字符串msg=“[”+res+“]”;
JSONArray-json;
试一试{
json=新的JSONArray(msg);
Map mapp=newhashmap();
for(int i=0;i
实现此功能后,它将打印所有年龄相同的用户。public class json{
公共空间更改(){
String text=“{\”name\”:\“Ram\”,\“email\”:\”ram@gmail.com\“,\”年龄\“:23}”
+“{\'name\':\'Shyam\',\'email\':\”shyam23@gmail.com\“,”年龄\“:28}”
+“{\'name\':\'John\',\'email\':\”john@gmail.com\“,\”年龄\“:23}”
+{\'name\':\'Bob\',\'email\':\'bob32@gmail.com\“,”年龄\“:41}”;
字符串已更改=text.toString();
int pos=changed.lastIndexOf(“}”);
字符串更改=已更改。子字符串(0,位置);
change=change.replace(“}”,“}”);
字符串res=change.concat(“}”);
字符串msg=“[”+res+“]”;
JSONArray-json;
试一试{
json=新的JSONArray(msg);
Map mapp=newhashmap();
for(int i=0;i
实现这一点,它将打印所有年龄相同的用户。事实上,您的问题中有很多问题;-)
首先,我说你的json是无效的。括号缺失,还有一些逗号
我首先将数据存储在一个简单的java对象中。因此,让我们创建一个Person类并实现我们自己的toString Met
public class Person {
String name;
String email;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
String output = "Name: " + this.name + "\n";
output += "Email: " + this.email + "\n";
output += "Age: " + this.age + "\n\n";
return output;
}
}
public static void main(String[] args) {
String text = "[{\"name\": \"Ram\",\"email\": \"ram@gmail.com\",\"age\": 23}, {\"name\": \"Shyam\",\"email\": \"shyam23@gmail.com\",\"age\": 28}, {\"name\": \"John\",\"email\": \"john@gmail.com\",\"age\": 23}, {\"name\": \"Bob\",\"email\": \"bob32@gmail.com\",\"age\": 41}]";
JSONArray jsonArr = new JSONArray(text);
Map<Integer, List<Person>> ageMap = new HashMap<Integer, List<Person>>();
for (int i = 0; i < jsonArr.length(); i++) {
JSONObject obj = (JSONObject) jsonArr.get(i);
Person person = new Person();
person.setName(obj.getString("name"));
person.setEmail(obj.getString("email"));
person.setAge(obj.getInt("age"));
int age = person.getAge();
List<Person> ageList = ageMap.get(age);
if (ageList == null) {
ageList = new ArrayList<Person>();
}
ageList.add(person);
ageMap.put(age, ageList);
}
for (Map.Entry<Integer, List<Person>> entry : ageMap.entrySet()) {
List<Person> ageList = entry.getValue();
if (ageList.size() > 1) {
System.out.println("*****************************");
System.out.println("Person with same age '" + entry.getKey() + "':" + "\n");
for (Person person : ageList) {
System.out.println(person.toString());
}
System.out.println("\n");
}
}
}