Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 复制Json数组的对象并显示具有相同参数的对象_Java_Json - Fatal编程技术网

Java 复制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

我有一个包含四个对象的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}   
我希望遍历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");
                }
    
            }
    
        }