Составить json из text.txt

417
08 января 2018, 10:18

Здравствуйте.Нужна помощь.Есть txt файл с вот таким содержимым : (тут расписание на каждый день 12-и месяцев).

1   7:01    8:39    8:54    13:20   16:21   18:03   19:39
2   7:02    8:39    8:54    13:20   16:22   18:03   19:40 
3   7:02    8:40    8:54    13:21   16:23   18:04   19:41 
4   7:02    8:40    8:54    13:21   16:23   18:05   19:42 
5   7:02    8:40    8:54    13:22   16:24   18:06   19:42 
6   7:02    8:40    8:54    13:22   16:25   18:07   19:43 
7   7:02    8:39    8:54    13:23   16:26   18:08   19:44 
8   7:02    8:39    8:54    13:23   16:27   18:09   19:45 
9   7:02    8:39    8:54    13:24   16:28   18:10   19:46 
10  7:02    8:39    8:54    13:24   16:29   18:11   19:47 
11  7:02    8:39    8:53    13:24   16:30   18:12   19:48 
12  7:02    8:39    8:53    13:25   16:31   18:13   19:49 
13  7:02    8:38    8:53    13:25   16:32   18:14   19:49 
14  7:01    8:38    8:52    13:25   16:33   18:15   19:50 
15  7:01    8:38    8:52    13:26   16:34   18:16   19:51 
16  7:01    8:37    8:51    13:26   16:36   18:17   19:52 
17  7:01    8:37    8:51    13:27   16:37   18:18   19:53 
18  7:00    8:36    8:50    13:27   16:38   18:20   19:54 
19  7:00    8:36    8:50    13:27   16:39   18:21   19:55 
20  7:00    8:35    8:49    13:27   16:40   18:22   19:56 
21  6:59    8:35    8:49    13:28   16:41   18:23   19:57 
22  6:59    8:34    8:48    13:28   16:42   18:24   19:58 
23  6:58    8:33    8:47    13:28   16:44   18:25   19:59 
24  6:58    8:33    8:47    13:29   16:45   18:27   20:00 
25  6:57    8:32    8:46    13:29   16:46   18:28   20:01 
26  6:57    8:31    8:45    13:29   16:47   18:29   20:02 
27  6:56    8:30    8:44    13:29   16:48   18:30   20:03 
28  6:55    8:29    8:43    13:29   16:49   18:31   20:04 
29  6:55    8:29    8:42    13:30   16:51   18:33   20:05 
30  6:54    8:28    8:42    13:30   16:52   18:34   20:07 
31  6:53    8:27    8:41    13:30   16:53   18:35   20:08
1   6:52    8:26    8:40    13:30   16:54   18:36   20:09
2   6:52    8:25    8:39    13:30   16:55   18:37   20:10
3   6:51    8:24    8:38    13:30   16:57   18:39   20:11
4   6:50    8:23    8:37    13:30   16:58   18:40   20:12
5   6:49    8:22    8:36    13:31   16:59   18:41   20:13
6   6:48    8:21    8:34    13:31   17:00   18:42   20:14
7   6:47    8:20    8:33    13:31   17:01   18:44   20:15
8   6:46    8:19    8:32    13:31   17:02   18:45   20:16
9   6:45    8:17    8:31    13:31   17:04   18:46   20:17
10  6:44    8:16    8:30    13:31   17:05   18:47   20:18
11  6:43    8:15    8:29    13:31   17:06   18:48   20:19
12  6:42    8:14    8:27    13:31   17:07   18:50   20:20
13  6:41    8:13    8:26    13:31   17:08   18:51   20:22
14  6:40    8:11    8:25    13:31   17:09   18:52   20:23
15  6:39    8:10    8:23    13:31   17:10   18:53   20:24
16  6:37    8:09    8:22    13:31   17:11   18:54   20:25
17  6:36    8:08    8:21    13:31   17:13   18:56   20:26
18  6:35    8:06    8:19    13:31   17:14   18:57   20:27
19  6:34    8:05    8:18    13:30   17:15   18:58   20:28
20  6:32    8:03    8:17    13:30   17:16   18:59   20:29
21  6:31    8:02    8:15    13:30   17:17   19:00   20:30
22  6:30    8:01    8:14    13:30   17:18   19:02   20:31
23  6:28    7:59    8:12    13:30   17:19   19:03   20:32
24  6:27    7:58    8:11    13:30   17:20   19:04   20:34
25  6:26    7:56    8:09    13:30   17:21   19:05   20:35
26  6:24    7:55    8:08    13:30   17:22   19:06   20:36
27  6:23    7:53    8:06    13:29   17:23   19:07   20:37
28  6:21    7:52    8:05    13:29   17:24   19:08   20:38
29  6:20    7:50    8:03    13:29   17:25   19:10   20:39

Певый столбец это дни 12-и месяцев.Остальные 7 столбов это расписание на каждый день.И все это нужно перегнать в JSON.Только первый и четвертый столбец из 8 нужно пропустить.JSON должен быть с такой структурой :

{
    "month_1": {
        "day_1": {
            "lala": "16:21 ",
            "lala2": "8:54 ",
            "lala3": "7:01 ",
            "lala4": "18:02 ",
            "lala5": "13:20 ",
            "lala6": "21:20 "
        },
        "day_2": {
            "lala": "16:21 ",
            "lala2": "8:54 ",
            "lala3": "7:01 ",
            "lala4": "18:02 ",
            "lala5": "13:20 ",
            "lala6": "21:20 "
        },
      И.Т.Д. дни до конца месяца
    },
    "month_2": {
        "day_1": {
            "lala": "16:21 ",
            "lala2": "8:54 ",
            "lala3": "7:01 ",
            "lala4": "18:02 ",
            "lala5": "13:20 ",
            "lala6": "21:20 "
        },
        "day_2": {
            "lala": "16:21 ",
            "lala2": "8:54 ",
            "lala3": "7:01 ",
            "lala4": "18:02 ",
            "lala5": "13:20 ",
            "lala6": "21:20 "
        },
        И.Т.Д. дни до конца месяца
    },
       И.Т.Д. месяцы до конца ГОДА
}

Проблема у меня возникла с заполнением дней в месяцы.Каждый месяц заполняется только 7-и днями.Вот собственно код :

Метод который подбирает слова из одной строки и заполняет ими ArrayList:

static ArrayList mySubString(String s) {
        int i = 0;
        ArrayList<String> list= new ArrayList<String>();
        for (int j = 0; j < s.length(); j++) {
            if (s.charAt(j) == '\t') {
                if (j > i) {
                    list.add(s.substring(i, j));
                }
                i = j + 1;
            }
        }
        if (i < s.length()) {
            list.add(s.substring(i));
        }
        list.remove(2);
        return list;
    }

И громадный main метод с одним while и с 12-ю if-ами для каждого месяца:

public static void main (String[] args) throws IOException {
        InputStream inputStream = new FileInputStream("txtx.txt");
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        String s ;
        ArrayList<String> list = null;
        //Главный json объект
        JSONObject year = new JSONObject();
        //json объекты для 12 месяцев.В каждом из них должны быть все его 
        //дни.
        JSONObject month1 = new JSONObject();
        JSONObject month2 = new JSONObject();
        JSONObject month3 = new JSONObject();
        JSONObject month4 = new JSONObject();
        JSONObject month5 = new JSONObject();
        JSONObject month6 = new JSONObject();
        JSONObject month7 = new JSONObject();
        JSONObject month8 = new JSONObject();
        JSONObject month9 = new JSONObject();
        JSONObject month10 = new JSONObject();
        JSONObject month11 = new JSONObject();
        JSONObject month12 = new JSONObject();

        FileWriter file = null;
        int crntRow=0;
        while((s=bufferedReader.readLine())!=null){
             list = mySubString(s);
            //Число 32 это номер строки txt файла до которого должна 
            //сработать код внутри if-а 
            if(crntRow<32){
                //А вот этот json объект должен создастся и размещен внутрь
                //JSONObject month1; 31 раз.  
                JSONObject days = new JSONObject();
                int cc = 1;
                for (int i = 0; i < list.size(); i++) {
                //из list-а достаю слова в каждой ячейке и заполняю JSON 
                //обьект 
                if(i==1){
                    days.put("lala",list.get(i));
                }else if(i==2){
                    days.put("lala2",list.get(i));
                }else if(i==3){
                    days.put("lala3",list.get(i));
                }else if(i==4){
                    days.put("lala4",list.get(i));
                }else if(i==5){
                    days.put("lala5",list.get(i));
                }else if(i==5){
                    days.put("lala6",list.get(i));
                }

                month1.put("day_" + cc, days);
                cc++;
                 }
                if(crntRow==31) {
                    year.put("month_1",month1);
                }
                    crntRow++;
            }
            //тут и дальше тоже самое что сверху достаю строки от 32-х до 
            //60-и
            if(crntRow>=32&&crntRow<=60){
                JSONObject days = new JSONObject();
                int cc = 1;
                for (int i = 0; i < list.size(); i++) {
                    if(list.get(i).equals("Кун")){
                        break;
                    }
                    if(i==1){
                        days.put("lala",list.get(i));
                    }else if(i==2){
                        days.put("lala2",list.get(i));
                    }else if(i==3){
                        days.put("lala3",list.get(i));
                    }else if(i==4){
                        days.put("lala4",list.get(i));
                    }else if(i==5){
                        days.put("lala5",list.get(i));
                    }else if(i==5){
                        days.put("lala6",list.get(i));
                    }
                    month2.put("day_" + cc, days);
                    cc++;
                    }
                    if(crntRow==60) {
                        year.put("month_2",month2);
                    }
                    crntRow++;
            }
            if(crntRow>=61&&crntRow<=91){
                JSONObject days = new JSONObject();
                int cc = 1;
                for (int i = 0; i < list.size(); i++) {
                    if(list.get(i).equals("Кун")){
                        break;
                    }
                    if(i==1){
                        days.put("lala",list.get(i));
                    }else if(i==2){
                        days.put("lala2",list.get(i));
                    }else if(i==3){
                        days.put("lala3",list.get(i));
                    }else if(i==4){
                        days.put("lala4",list.get(i));
                    }else if(i==5){
                        days.put("lala5",list.get(i));
                    }else if(i==5){
                        days.put("lala6",list.get(i));
                    }

                    month3.put("day_" + cc, days);
                    cc++;
                }
                if(crntRow==91) {
                    year.put("month_3",month3);
                }
                    crntRow++;
            }
            if(crntRow>=92&&crntRow<=121){
                int cc = 1;
                JSONObject days = new JSONObject();
                for (int i = 0; i < list.size(); i++) {
                    if(list.get(i).equals("Кун")){
                        break;
                    }
                    if(i==1){
                        days.put("lala",list.get(i));
                    }else if(i==2){
                        days.put("lala2",list.get(i));
                    }else if(i==3){
                        days.put("lala3",list.get(i));
                    }else if(i==4){
                        days.put("lala4",list.get(i));
                    }else if(i==5){
                        days.put("lala5",list.get(i));
                    }else if(i==5){
                        days.put("lala6",list.get(i));
                    }
                    month4.put("day_" + cc, days);
                    cc++;
                }
                if(crntRow==121) {
                    year.put("month_4",month4);
                }
                    crntRow++;
            }
            if(crntRow>=122&&crntRow<=152){
                JSONObject days = new JSONObject();
                int cc = 1;
                for (int i = 0; i < list.size(); i++) {
                    if(list.get(i).equals("Кун")){
                        break;
                    }
                    if(i==1){
                        days.put("lala",list.get(i));
                    }else if(i==2){
                        days.put("lala2",list.get(i));
                    }else if(i==3){
                        days.put("lala3",list.get(i));
                    }else if(i==4){
                        days.put("lala4",list.get(i));
                    }else if(i==5){
                        days.put("lala5",list.get(i));
                    }else if(i==5){
                        days.put("lala6",list.get(i));
                    }
                    month5.put("day_" + cc, days);
                    cc++;
                }
                if(crntRow==152) {
                    year.put("month_5",month5);
                }
                    crntRow++;
            }
            if(crntRow>=153&&crntRow<=182){
                JSONObject days = new JSONObject();
                int cc = 1;
                for (int i = 0; i < list.size(); i++) {
                    if(list.get(i).equals("Кун")){
                        break;
                    }
                    if(i==1){
                        days.put("lala",list.get(i));
                    }else if(i==2){
                        days.put("lala2",list.get(i));
                    }else if(i==3){
                        days.put("lala3",list.get(i));
                    }else if(i==4){
                        days.put("lala4",list.get(i));
                    }else if(i==5){
                        days.put("lala5",list.get(i));
                    }else if(i==5){
                        days.put("lala6",list.get(i));
                    }
                    month6.put("day_" + cc, days);
                    cc++;
                }
                if(crntRow==182) {
                    year.put("month_6",month6);
                }
                    crntRow++;
            }
            if(crntRow>=183&&crntRow<=213){
                JSONObject days = new JSONObject();
                int cc = 1;
                for (int i = 0; i < list.size(); i++) {
                    if(list.get(i).equals("Кун")){
                        break;
                    }
                    if(i==1){
                        days.put("lala",list.get(i));
                    }else if(i==2){
                        days.put("lala2",list.get(i));
                    }else if(i==3){
                        days.put("lala3",list.get(i));
                    }else if(i==4){
                        days.put("lala4",list.get(i));
                    }else if(i==5){
                        days.put("lala5",list.get(i));
                    }else if(i==5){
                        days.put("lala6",list.get(i));
                    }
                    month7.put("day_" + cc, days);
                    cc++;
                }
                if(crntRow==213) {
                    year.put("month_7",month7);
                }
                    crntRow++;
            }
            if(crntRow>=214&&crntRow<=244){
                JSONObject days = new JSONObject();
                int cc = 1;
                for (int i = 0; i < list.size(); i++) {
                    if(list.get(i).equals("Кун")){
                        break;
                    }
                    if(i==1){
                        days.put("lala",list.get(i));
                    }else if(i==2){
                        days.put("lala2",list.get(i));
                    }else if(i==3){
                        days.put("lala3",list.get(i));
                    }else if(i==4){
                        days.put("lala4",list.get(i));
                    }else if(i==5){
                        days.put("lala5",list.get(i));
                    }else if(i==5){
                        days.put("lala6",list.get(i));
                    }
                    month8.put("day_" + cc, days);
                    cc++;
                }
                if(crntRow==244) {
                    year.put("month_8",month8);
                }
                    crntRow++;
            }
            if(crntRow>=245&&crntRow<=274){
                JSONObject days = new JSONObject();
                int cc = 1;
                for (int i = 0; i < list.size(); i++) {
                    if(list.get(i).equals("Кун")){
                        break;
                    }
                    if(i==1){
                        days.put("lala",list.get(i));
                    }else if(i==2){
                        days.put("lala2",list.get(i));
                    }else if(i==3){
                        days.put("lala3",list.get(i));
                    }else if(i==4){
                        days.put("lala4",list.get(i));
                    }else if(i==5){
                        days.put("lala5",list.get(i));
                    }else if(i==5){
                        days.put("lala6",list.get(i));
                    }
                    month9.put("day_" + cc, days);
                    cc++;
                }
                if(crntRow==274) {
                    year.put("month_9",month9);
                }
                    crntRow++;
            }
            if(crntRow>=275&&crntRow<=305){
                JSONObject days = new JSONObject();
                int cc = 1;
                for (int i = 0; i < list.size(); i++) {
                    if(list.get(i).equals("Кун")){
                        break;
                    }
                    if(i==1){
                        days.put("lala",list.get(i));
                    }else if(i==2){
                        days.put("lala2",list.get(i));
                    }else if(i==3){
                        days.put("lala3",list.get(i));
                    }else if(i==4){
                        days.put("lala4",list.get(i));
                    }else if(i==5){
                        days.put("lala5",list.get(i));
                    }else if(i==5){
                        days.put("lala6",list.get(i));
                    }

                    month10.put("day_" + cc, days);
                    cc++;
                }
                if(crntRow==305) {
                    year.put("month_10",month10);
                }
                    crntRow++;
            }
            if(crntRow>=306&&crntRow<=335){
                JSONObject days = new JSONObject();
                int cc = 1;
                for (int i = 0; i < list.size(); i++) {
                    if(list.get(i).equals("Кун")){
                        break;
                    }
                    if(i==1){
                        days.put("lala",list.get(i));
                    }else if(i==2){
                        days.put("lala2",list.get(i));
                    }else if(i==3){
                        days.put("lala3",list.get(i));
                    }else if(i==4){
                        days.put("lala4",list.get(i));
                    }else if(i==5){
                        days.put("lala5",list.get(i));
                    }else if(i==5){
                        days.put("lala6",list.get(i));
                    }

                    month11.put("day_" + cc, days);
                    cc++;
                }
                if(crntRow==335) {
                    year.put("month_11",month11);
                }
                    crntRow++;
            }
            if(crntRow>=336&&crntRow<=366){
                JSONObject days = new JSONObject();
                int cc = 1;
                for (int i = 0; i < list.size(); i++) {
                    if(list.get(i).equals("Кун")){
                        break;
                    }
                    if(i==1){
                        days.put("lala",list.get(i));
                    }else if(i==2){
                        days.put("lala2",list.get(i));
                    }else if(i==3){
                        days.put("lala3",list.get(i));
                    }else if(i==4){
                        days.put("lala4",list.get(i));
                    }else if(i==5){
                        days.put("lala5",list.get(i));
                    }else if(i==5){
                        days.put("lala6",list.get(i));
                    }

                    month12.put("day_" + cc, days);
                    cc++;
                }
                if(crntRow==366) {
                    year.put("month_12",month12);
                }
                crntRow++;
            }
        }
        try {
            file = new FileWriter("test.json");
            file.write(year.toJSONString());
            file.flush();

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            file.close();
        }
    }
Помогите пожалуйста кто с чем может..
Answer 1

Это, а не проще регуляркой пройтись, м?

Pattern p = Pattern.compile("(.+?)\\s+(.+?)\\s+(.+?)\\s+(.+?)\\s+(.+?)\\s+(.+?)\\s+(.+?)\\s+(.+)");
Matcher matcher = p.matcher(this.value);
JSONObject year = new JSONObject();
JSONObject month = new JSONObject();
JSONObject day = new JSONObject();
int monthValue = 0;
while (matcher.find()) {
    int dayInt = Integer.parseInt(matcher.group(1));
    if(dayInt == 1) {
        year.put("month_" + monthValue, month);
        monthValue++;
        month.clear();
    }
    day.clear();
    for(int i=2; i < matcher.groupCount(); i++) {
        day.put("lala" + i, matcher.group(i));
    }
    month.put("day_" + dayInt, day);
}
System.out.println(year);

И на выходе получается что-то вроде: http://jsoneditoronline.org/?id=b9bffd45bdec1265c971250c84c79d11

Answer 2
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Schedule {
    @JsonProperty("date")
    private LocalDate date;    
    @JsonProperty("lala")
    private LocalTime time1;
    @JsonProperty("lala2")
    private LocalTime time2;
    @JsonIgnore
    private LocalTime time3;
    @JsonProperty("lala3")
    private LocalTime time4;
    @JsonProperty("lala4")
    private LocalTime time5;
    @JsonProperty("lala5")
    private LocalTime time6;
    @JsonProperty("lala6")
    private LocalTime time7;

    public LocalDate getDate() {
        return date;
    }
    public void setDate(LocalDate date) {
        this.date = date;
    }
    public LocalTime getTime1() {
        return time1;
    }
    public void setTime1(LocalTime time1) {
        this.time1 = time1;
    }
    public LocalTime getTime2() {
        return time2;
    }
    public void setTime2(LocalTime time2) {
        this.time2 = time2;
    }
    public LocalTime getTime3() {
        return time3;
    }
    public void setTime3(LocalTime time3) {
        this.time3 = time3;
    }
    public LocalTime getTime4() {
        return time4;
    }
    public void setTime4(LocalTime time4) {
        this.time4 = time4;
    }
    public LocalTime getTime5() {
        return time5;
    }
    public void setTime5(LocalTime time5) {
        this.time5 = time5;
    }
    public LocalTime getTime6() {
        return time6;
    }
    public void setTime6(LocalTime time6) {
        this.time6 = time6;
    }
    public LocalTime getTime7() {
        return time7;
    }
    public void setTime7(LocalTime time7) {
        this.time7 = time7;
    }
    @Override
    public String toString() {
        return "Schedule{" + "date=" + date + ", time1=" + time1 + ", time2=" + time2 + ", time3=" + time3 + ", time4=" + time4 + ", time5=" + time5 + ", time6=" + time6 + ", time7=" + time7 + '}';
    }
    public LocalTime timeParser (String time) {
        if (time==null) return null;
        String[] split = time.split(":");
        if (split.length==2) {
            try{
                return LocalTime.of(Integer.valueOf(split[0]), Integer.valueOf(split[1]));
            }catch (NumberFormatException | java.time.DateTimeException e){
                return null;
            }
        }
        else return null;
    }
    public static List <Schedule> readScheduleFromFile(String fileName) throws FileNotFoundException {
        List <Schedule> scheduleList = new ArrayList<>();
        Scanner sc = new Scanner(new File(fileName), "UTF-8");
        LocalDate date = LocalDate.now().withDayOfYear(1);
        int monthCount=0;
        while(sc.hasNext()){
            String nextLine = sc.nextLine();
            String[] split = nextLine.split(" ");
            Schedule schedule = new Schedule();
            int count = 0;
            for (String s : split) {
                if (!s.trim().isEmpty()) {
                    switch(count){
                        case 0:
                            try{
                                int day = Integer.valueOf(s);
                                if (day==1) monthCount++;
                                schedule.setDate(date.withMonth(monthCount).withDayOfMonth(day));
                                break;
                            }catch (NumberFormatException | java.time.DateTimeException e){
                                continue;
                            }
                        case 1: schedule.setTime1(schedule.timeParser(s)); break;
                        case 2: schedule.setTime2(schedule.timeParser(s)); break;
                        case 3: schedule.setTime3(schedule.timeParser(s)); break;
                        case 4: schedule.setTime4(schedule.timeParser(s)); break;
                        case 5: schedule.setTime5(schedule.timeParser(s)); break;
                        case 6: schedule.setTime6(schedule.timeParser(s)); break;
                        case 7: schedule.setTime7(schedule.timeParser(s)); break;
                    }
                    count++;
                }
            }
            scheduleList.add(schedule);
        }
        return scheduleList;
    }
    public static void main(String[] args) throws JsonProcessingException, IOException {
        String fileName = "txtx.txt";
        List<Schedule> scheduleList = readScheduleFromFile(fileName);

        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JavaTimeModule());
        for (Schedule schedule : scheduleList) {
            String writeValueAsString = objectMapper.writeValueAsString(schedule);
            System.out.println(writeValueAsString);
            System.out.println("**************************************************");
            Schedule sc = objectMapper.readValue(writeValueAsString, Schedule.class);
            System.out.println(sc);
            System.out.println("**************************************************");
        }
    }

}
READ ALSO
Картинки в GridView

Картинки в GridView

Пытаюсь освоить Android Studio, поставил себе задачу реализовать приложение, которое бы брало с сервера JSON файл и выводило бы из него данные

251
Сравнения строк в Ява [дубликат]

Сравнения строк в Ява [дубликат]

На данный вопрос уже ответили:

244
Layout добавить в начало

Layout добавить в начало

Обычно, чтобы добавить элемент, используется:

233
Помогите встроить RewardedVideoAd в libgdx проект

Помогите встроить RewardedVideoAd в libgdx проект

Находил кучу инструкций по вставке рекламы в приложения, но не понимаю, как их применять к моему libgdx проектуВышло разве что вставить баннер,...

220