Реализация интерпретатора комментариев JSON

GolangBeginner
Практиковаться сейчас

Введение

В этом проекте вы научитесь реализовывать интерпретатор комментариев JSON. Это полезная функция при работе с файлами конфигурации JSON, так как позволяет добавлять комментарии для объяснения причины определенных настроек.

👀 Предварительный просмотр

$ /usr/local/go/bin/go test
PASS
ok      jsonex  0.002s

🎯 Задачи

В этом проекте вы научитесь:

  • Как инициализировать модуль Go и настроить необходимую среду
  • Как реализовать функцию разбора комментариев JSON, которая поддерживает символ # в качестве комментария
  • Как обрабатывать случаи, когда символ " является частью содержимого строки
  • Как протестировать функцию разбора комментариев JSON

🏆 Достижения

После завершения этого проекта вы сможете:

  • Разобраться, как работать с модулями Go и настраивать разработочную среду
  • Реализовать пользовательский парсер JSON, поддерживающий комментарии
  • Писать тесты для гарантии правильности функции разбора комментариев JSON
  • Применить свои новые знания для улучшения файлов конфигурации на основе JSON с информативными комментариями

Инициализировать проект

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

  1. Откройте терминал и перейдите в каталог /home/labex/project.

  2. Инициализируйте модуль Go с помощью следующей команды:

    /usr/local/go/bin/go mod init jsonex
    
  3. Установите необходимые пакеты, выполнив следующую команду:

    /usr/local/go/bin/go get github.com/stretchr/testify/assert
    

Реализовать функцию разбора комментариев JSON

В этом шаге вы научитесь реализовывать функцию разбора комментариев JSON. Следуйте шагам ниже, чтобы выполнить этот шаг:

  1. Откройте файл jsonex.go в редакторе.

  2. Функция Unmarshal разбирает JSON закодированные данные и сохраняет результат.

    • Поддерживать # в качестве символа комментария в JSON, и все, что находится после этого символа, должно считаться комментарием.
    • Когда " является частью содержимого строки, она должна быть представлена в виде \", а \ должен быть представлен в виде \\.
  3. Реализовать функцию trimCommentsLine, чтобы проверить, является ли строка комментарием или нет. Если это не комментарий, вернуть саму строку.

  4. Полный код функции trimCommentsLine должен быть следующим:

    // trimCommentsLine проверяет, является ли строка комментарием или нет, если нет, возвращает саму строку
    func trimCommentsLine(line []byte) []byte {
     var newLine []byte
     var i, quoteCount int
     lastIdx := len(line) - 1
     for i = 0; i <= lastIdx; i++ {
      // если символ '\'
      if line[i] == '\\' {
       // если индекс не последний, проверить, является ли следующий символ '"' или '\', если да, добавить его
       if i!= lastIdx && (line[i+1] == '\\' || line[i+1] == '"') {
        newLine = append(newLine, line[i], line[i+1])
        i++
        continue
       }
      }
    
      // если символ '"', увеличить quoteCount
      if line[i] == '"' {
       quoteCount++
      }
    
      // если символ '#'
      if line[i] == '#' {
       // если quoteCount четное, прервать, потому что '#' не находится в строке,
       // находится в комментарии
       if quoteCount%2 == 0 {
        break
       }
      }
    
      newLine = append(newLine, line[i])
     }
    
     return newLine
    }
    

Тестировать функцию разбора комментариев JSON

В этом шаге вы научитесь тестировать функцию разбора комментариев JSON. Следуйте шагам ниже, чтобы выполнить этот шаг:

  1. Откройте терминал и перейдите в каталог /home/labex/project.

  2. Выполните следующую команду для запуска тестов:

    cd /home/labex/project
    /usr/local/go/bin/go test
    
  3. Если тесты пройдены, вы увидите следующий вывод:

    PASS
    ok      jsonex  0.002s
    
  4. Если вы столкнулись с ошибкой по таймауту, выполните следующие команды в терминале, а затем нажмите кнопку "Проверить снова", чтобы пройти проверку:

    cd /home/labex/project
    /usr/local/go/bin/go test
    

Поздравляем! Вы успешно реализовали функцию разбора комментариев JSON и протестировали ее. Теперь вы можете использовать эту функцию в своем проекте.

Резюме

Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.

✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться