Неправильно отформатированный файл json, вызывающий проблемы в моем терминале

#json #bash

#json #bash

Вопрос:

Я возился с файлами, которых не должно было быть, чтобы отредактировать мою оболочку bash, чтобы она выглядела красиво. Я загрузил bash_it и следовал этому руководству, чтобы сделать это ( https://medium.freecodecamp.org/jazz-up-your-bash-terminal-a-step-by-step-guide-with-pictures-80267554cb22). Однако теперь все, что я вижу в своей оболочке, это в каждой строке:

 Expecting ',' delimiter: line 39 column 2 (char 2196)
Expecting ',' delimiter: line 39 column 2 (char 2196)
  

Итак, затем я иду и добавляю запятую в конец файла, который, как я думаю, является источником проблемы ( default.json ), которая выглядит следующим образом:

 {
    "name": "Default color scheme for shell prompts",
    "groups": {
        "hostname":         { "fg": "brightyellow", "bg": "mediumorange", "attrs": [] },
        "environment":      { "fg": "white", "bg": "darkestgreen", "attrs": [] },
        "mode":             { "fg": "darkestgreen", "bg": "brightgreen", "attrs": ["bold"] },
        "attached_clients": { "fg": "white", "bg": "darkestgreen", "attrs": [] }
    },
    "mode_translations": {
        "vicmd": {
            "groups": {
        "hostname":         { "fg": "brightyellow", "bg": "mediumorange", "attrs": [] },
        "environment":      { "fg": "white", "bg": "darkestgreen", "attrs": [] },
        "mode":             { "fg": "darkestgreen", "bg": "brightgreen", "attrs": ["bold"] },
        "attached_clients": { "fg": "white", "bg": "darkestgreen", "attrs": [] },

        "gitstatus":                 { "fg": "gray8",           "bg": "gray2", "attrs": [] },
            "gitstatus_branch":          { "fg": "gray8",           "bg": "gray2", "attrs": [] },
            "gitstatus_branch_clean":    { "fg": "green",           "bg": "gray2", "attrs": [] },
            "gitstatus_branch_dirty":    { "fg": "gray8",           "bg": "gray2", "attrs": [] },
            "gitstatus_branch_detached": { "fg": "mediumpurple",    "bg": "gray2", "attrs": [] },
            "gitstatus_tag":             { "fg": "darkcyan",        "bg": "gray2", "attrs": [] },
            "gitstatus_behind":          { "fg": "gray10",          "bg": "gray2", "attrs": [] },
            "gitstatus_ahead":           { "fg": "gray10",          "bg": "gray2", "attrs": [] },
            "gitstatus_staged":          { "fg": "green",           "bg": "gray2", "attrs": [] },
            "gitstatus_unmerged":        { "fg": "brightred",       "bg": "gray2", "attrs": [] },
            "gitstatus_changed":         { "fg": "mediumorange",    "bg": "gray2", "attrs": [] },
            "gitstatus_untracked":       { "fg": "brightestorange", "bg": "gray2", "attrs": [] },
            "gitstatus_stashed":         { "fg": "darkblue",        "bg": "gray2", "attrs": [] },
            "gitstatus:divider":         { "fg": "gray8",           "bg": "gray2", "attrs": [] }
        },  
        "mode_translations": {
            "vicmd": {
                "groups": {
                    "mode": {"fg": "darkestcyan", "bg": "white", "attrs": ["bold"]}
            }
        }
    }
},
  

И затем я получаю другую ошибку, которая появляется в терминале

 Expecting property name enclosed in double quotes: line 39 column 3 (char 2197)
Expecting property name enclosed in double quotes: line 39 column 3 (char 2197)
  

Поэтому я добавляю двойные кавычки, и он ожидает еще одну запятую и больше кавычек и т.д…

В идеале я просто хотел бы иметь возможность снова использовать свой терминал без этих ошибок json в каждой строке.

Комментарии:

1. Существует множество онлайн-валидаторов json. Вы пытались использовать какой-либо из них?

Ответ №1:

действительно, есть много онлайн-валидаторов JSON, таких как этот:https://jsoncompare.com /#!/простой/

Тем не менее, я использую свой собственный автономный инструмент unix jtc , используя опцию отладки ( -d ), легко определить местоположение в JSON, где проблема (таким образом, этот инструмент также можно использовать в качестве средства проверки JSON). В вашем случае добавление запятой в конце JSON неверно, так как обычно любой вложенный JSON должен быть закрыт либо с помощью } , либо с помощью ] . Итак, как только конечная запятая удалена, инструмент выдает этот вывод:

 bash $ <default.json jtc -d
.read_inputs(), reading json from <stdin>
.parsejson(), exception locus: ...          }|        }|    }|}|
.location_(), exception spot: --------------------------------->| (offset: 2421)
jtc json exception: unexpected_end_of_string
bash $ 
  

unexpected_end_of_string в конце JSON может означать только одно: отсутствуют скобки ] или } . В вашем JSON нет отсутствующих незакрытых массивов (все они закрыты [] ), таким образом, пропущены только закрывающие фигурные скобки } .

Добавление одного за другим в конце, пока JSON не начнет разбор (всего добавлено 2):

 bash $ <default.json jtc -d
.read_inputs(), reading json from <stdin>
.write_json(), outputting json to <stdout>
{
   "groups": {
      "attached_clients": {
         "attrs": [],
         "bg": "darkestgreen",
         "fg": "white"
      },
      "environment": {
         "attrs": [],
         "bg": "darkestgreen",
         "fg": "white"
      },
      "hostname": {
...