создать json на основе строки через запятую в java? - PullRequest
0 голосов
/ 06 апреля 2020

входные данные в файле, указанном ниже

1985,Adv,Blue
1985,Adv,gill
1985,Adv,mon
1985,Cal,20
1985,Cal,25
1985,Cape,Din
1966,Ray,One
1966,Ray,bel
1966,Ray,Reb
1966,Sum,37
1966,Tar,Black
1966,Tar,Watch
1967,Yachts,Nut
1967,Yachts,Shark
1967,Cal,20
1967,Cal,25
1967,Cal,28

Ожидаемый вывод в виде файла json с форматированными данными, такими как

{
    "1985" : {
        "Adv" : ["Blue", "gill", "mon"],
        "Cal" : ["20", "25"],
        "Cape" : ["Din"]
    },
    "1966" : {
        "Ray" : ["One", "bel", "Reb"],
        "Sum" : ["37"],
        "Tar" : ["Black", "Watch"]
    },
    "1967" : {
        "Yachts" : ["Nut", "Shark"],
        "Cal" : ["20", "25", "28"]
    }
}

У меня более 1000 строк данных. Нужно использовать немного l oop. Как это сделать в java

1 Ответ

2 голосов
/ 08 апреля 2020

Вам необходимо импортировать внешнюю библиотеку org.json.JSONObject

 File myObj = new File("test.txt");
            Scanner myReader = new Scanner(myObj);
            List<String> stringList = new ArrayList<>();
            while (myReader.hasNextLine()) {
                String data = myReader.nextLine();
                stringList.add(data);
            }
            Map<String, Map<String,List<String>>> mapStringToObject = new HashMap<>();
            for(String string : stringList){
                String[] data = string.split(",");
                if(!mapStringToObject.containsKey(data[0])){
                    Map<String,List<String>>  mapOfLists = new HashMap<>();
                    List<String> list = new ArrayList<>();
                    list.add(data[2]);
                    mapOfLists.put(data[1],list);
                    mapStringToObject.put(data[0],mapOfLists);
                }else{
                    if(!mapStringToObject.get(data[0]).containsKey(data[1])){
                        List<String> list = new ArrayList<>();
                        list.add(data[2]);
                        mapStringToObject.get(data[0]).put(data[1],list);
                    }else
                        mapStringToObject.get(data[0]).get(data[1]).add(data[2]);
                }
            }
            JSONObject json = new JSONObject(mapStringToObject);
            System.out.println(json);
            myReader.close();

test.txt

1985,Adv,Blue
1985,Adv,gill
1985,Adv,mon
1985,Cal,20
1985,Cal,25
1985,Cape,Din
1966,Ray,One
1966,Ray,bel
1966,Ray,Reb
1966,Sum,37
1966,Tar,Black
1966,Tar,Watch
1967,Yachts,Nut
1967,Yachts,Shark
1967,Cal,20
1967,Cal,25
1967,Cal,28
...