【问题标题】:Convert a List Partially JSON Formatted Data into a Map将列表部分 JSON 格式的数据转换为地图
【发布时间】:2018-01-14 22:50:49
【问题描述】:

我有一个如下的对象数据

[{
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 中我将如何实现这一点。

请帮我解决这个问题

【问题讨论】:

  • 遗憾的是数据如上所示,除了自己实际解析字符串之外,没有简单的方法。
  • 那个json错了。你能贴一个正确的吗
  • @kimy82 Hi Buddy,它类似于 json 但要求是我所要求的,我有上面的数据,并希望它作为 MAP
  • Okei,有些东西不遵循任何正确的数据结构是很奇怪的。我猜那是一个普通的字符串?
  • @JohnHumanyun 只是为了确认我理解,您确实有一个字符串与您在问题开头显示的内容相匹配,并且您想在 Java 中解析该字符串。对吗?

标签: java json arraylist hashmap


【解决方案1】:

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

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]}

注意:

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

【讨论】:

    猜你喜欢
    • 2014-01-23
    • 2014-02-27
    • 1970-01-01
    • 2021-07-04
    • 2016-08-05
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多