Прием отформатированного Json (многострочного) ввода от пользователя в консольном приложении Java со сканером (все строки не читаются) - PullRequest
0 голосов
/ 27 марта 2019

У меня есть сценарий, в котором мне нужно взять отформатированный Json (многострочный) в качестве входных данных и что-то с ним сделать.Я подумал, что было бы неплохо сделать это в простом консольном приложении, так как это всего лишь инструмент, который я создаю, и хочу, чтобы его можно было запускать локально.Если мне вместо этого нужно читать Json из файла, пожалуйста, дайте мне знать.

Планируется, что пользователь вставит что-то подобное в консольное приложение, а затем напечатает «exit».

    {
       "section1":{
          "line1":0.3456,
          "line2":{
             "line3":45345,
             "line4":67567
          },
          "section2":{
             "line6":867867,
             "line7":0.16767
          },
          "section3":{
             "line9":9977,
             "line10":0.76867
          },
          "array1":[
             {
                "ghjf":"1111",
                "ggeeaaa":678769,
                "ghj":0.6799789
             }
          ]
       }
    }
exit

Происходит пара вещей:
1. Первое {не распознается, поэтому мне нужно вставить его вручную.
2. Несколько строк не читаются ... т.е. "line1" получаетпропущено и многое другое.

Вот мой код:

System.out.println("Enter a valid JSON string: ");

Scanner scanner = new Scanner(System.in);

StringBuilder sb = new StringBuilder();

while (!scanner.nextLine().equals("exit")) {
    sb.append(scanner.nextLine());
}

sb.insert(0, "{");

String formattedJson = sb.toString()
        .replaceAll("\\t","").replaceAll("\\s", "");


 // Do something with formattedJson further in code...

1 Ответ

4 голосов
/ 27 марта 2019

Вы вызываете scanner.nextLine () дважды, но используете значение только один раз.

Попробуйте объявить его как переменную и вызвать nextLine () только один раз:

Scanner scanner = new Scanner(System.in);

StringBuilder sb = new StringBuilder();

String line;
while (!(line = scanner.nextLine()).equals("exit")) {
    sb.append(line);
}

AsВ результате вам, вероятно, не понадобится (следует удалить) это:

sb.insert(0, "{");
...