将列表部分JSON格式化数据转换为映射

时间:2017-08-07 15:06:49

标签: java json arraylist hashmap

我有以下对象数据,如下所示

[{
name = john , id=1,email id  : [abc@gmail.com,def@gmail.com,ghi@gmail.com]
},{
name = joy, id=2,email id  : [jkl@gmail.com,mno@gmail.com,pqr@gmail.com]
}]

我希望将以下内容转换为Map 如

{john=[abc@gmail.com,def@gmail.com,ghi@gmail.com]},{joy= [jkl@gmail.com,mno@gmail.com,pqr@gmail.com]}

在Java中我将如何实现这一目标。

请帮助我

1 个答案:

答案 0 :(得分:0)

没有简单的方法可以做到这一点,如此多的硬手动工作有很多错误的可能性,你可以使用它。只要您的数据完全如图所示那么这应该有用。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;




public class Person {




    int id;
    String name;
    List<String> emails;




    public static Person parse(String s) throws Exception {

        Person person = new Person();
        person.name = s.substring(0, s.indexOf(",")).replaceAll(".+= ?", "");
        s = s.substring(s.indexOf(",") + 1, s.length());
        person.id = Integer.parseInt(s.substring(0, s.indexOf(",")).replaceAll(".+= ?", "").trim());
        s = s.substring(s.indexOf(",") + 1, s.length());
        s = s.replaceAll(".+: ?", "").replaceAll("[ \\[\\]]", "");
        person.emails = Arrays.asList(s.split(","));

        return person;

    }




    public static List<Person> parseMany(String s) throws Exception {

        List<Person> people = new ArrayList<Person>();

        while (true){
            int openBracket = s.indexOf("{");
            int closeBracket = s.indexOf("}");

            if(closeBracket == -1){
                break;
            }
            people.add(parse(s.substring(openBracket, closeBracket)));
            s = s.substring(closeBracket + 1, s.length());

        }

        return people;

    }




    public static void main(String[] args) throws Exception {

        String s = "[{name = john , id=1,email id  : [abc@gmail.com,def@gmail.com,ghi@gmail.com]},{name = joy, id=2,email id  : [jkl@gmail.com,mno@gmail.com,pqr@gmail.com]}]";

        List<Person> people = parseMany(s);

        Map<String, List<String>> map = new HashMap<String, List<String>>();

        for(Person person : people){
            map.put(person.name, person.emails);
        }

        System.out.println(map);

    }

}

<强>输出:

  

{joy = [jkl@gmail.com,mno @ gmail.com,pqr @ gmail.com],约翰   = [abc @ gmail.com,def @ gmail.com,ghi @ gmail.com]} ​​

注意:

我没有费心去评论这段代码,因为问题没有遵循任何标准程序。