Implementar un interprete de comentarios JSON

GolangGolangBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este proyecto, aprenderás a implementar un interprete de comentarios JSON. Esta es una característica útil cuando se trabaja con archivos de configuración JSON, ya que te permite agregar comentarios para explicar el razonamiento detrás de ciertas configuraciones.

👀 Vista previa

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

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo inicializar un módulo de Go y configurar el entorno necesario
  • Cómo implementar una función de análisis de comentarios JSON que admita el carácter # como comentario
  • Cómo manejar los casos en los que el carácter " forma parte del contenido de la cadena
  • Cómo probar la función de análisis de comentarios JSON

🏆 Logros

Después de completar este proyecto, podrás:

  • Comprender cómo trabajar con módulos de Go y configurar un entorno de desarrollo
  • Implementar un analizador JSON personalizado que admita comentarios
  • Escribir pruebas para garantizar la corrección de tu función de análisis de comentarios JSON
  • Aplicar tus nuevos conocimientos para mejorar tus archivos de configuración basados en JSON con comentarios informativos

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("Golang")) -.-> go/FunctionsandControlFlowGroup(["Functions and Control Flow"]) go(("Golang")) -.-> go/AdvancedTopicsGroup(["Advanced Topics"]) go(("Golang")) -.-> go/TestingandProfilingGroup(["Testing and Profiling"]) go(("Golang")) -.-> go/CommandLineandEnvironmentGroup(["Command Line and Environment"]) go(("Golang")) -.-> go/DataTypesandStructuresGroup(["Data Types and Structures"]) go/DataTypesandStructuresGroup -.-> go/strings("Strings") go/FunctionsandControlFlowGroup -.-> go/functions("Functions") go/AdvancedTopicsGroup -.-> go/json("JSON") go/TestingandProfilingGroup -.-> go/testing_and_benchmarking("Testing and Benchmarking") go/CommandLineandEnvironmentGroup -.-> go/command_line("Command Line") go/CommandLineandEnvironmentGroup -.-> go/environment_variables("Environment Variables") subgraph Lab Skills go/strings -.-> lab-301258{{"Implementar un interprete de comentarios JSON"}} go/functions -.-> lab-301258{{"Implementar un interprete de comentarios JSON"}} go/json -.-> lab-301258{{"Implementar un interprete de comentarios JSON"}} go/testing_and_benchmarking -.-> lab-301258{{"Implementar un interprete de comentarios JSON"}} go/command_line -.-> lab-301258{{"Implementar un interprete de comentarios JSON"}} go/environment_variables -.-> lab-301258{{"Implementar un interprete de comentarios JSON"}} end

Inicializar el proyecto

En este paso, aprenderás a inicializar el proyecto y configurar el entorno necesario. Sigue los pasos siguientes para completar este paso:

  1. Abre una terminal y navega hasta el directorio /home/labex/project.

  2. Inicializa el módulo de Go usando el siguiente comando:

    $ /usr/local/go/bin/go mod init jsonex
  3. Instala los paquetes necesarios ejecutando el siguiente comando:

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

Implementar la función de análisis de comentarios JSON

En este paso, aprenderás a implementar la función de análisis de comentarios JSON. Sigue los pasos siguientes para completar este paso:

  1. Abre el archivo jsonex.go en el editor.

  2. La función Unmarshal está analizando los datos codificados en JSON y almacenando el resultado.

    • Soporte el carácter # como carácter de comentario en JSON, y todo lo que venga después de este carácter debe considerarse como un comentario.
    • Cuando " forma parte del contenido de la cadena, debe representarse como \", y el \ debe representarse como \\.
  3. Implementa la función trimCommentsLine para comprobar si una línea es un comentario o no. Si no es un comentario, devuelve la línea misma.

  4. El código completo de la función trimCommentsLine debe ser el siguiente:

    // trimCommentsLine comprueba si la línea es un comentario o no, si no lo es, devuelve la línea misma
    func trimCommentsLine(line []byte) []byte {
    	var newLine []byte
    	var i, quoteCount int
    	lastIdx := len(line) - 1
    	for i = 0; i <= lastIdx; i++ {
    		// si el carácter es '\'
    		if line[i] == '\\' {
    			// si el índice no es el último índice, comprueba si el siguiente carácter es '"' o '\', si es así, añádelo
    			if i!= lastIdx && (line[i+1] == '\\' || line[i+1] == '"') {
    				newLine = append(newLine, line[i], line[i+1])
    				i++
    				continue
    			}
    		}
    
    		// si el carácter es '"', incrementa el quoteCount
    		if line[i] == '"' {
    			quoteCount++
    		}
    
    		// si el carácter es '#'
    		if line[i] == '#' {
    			// si el quoteCount es par, rompe, porque el '#' no está en la cadena,
    			// está en el comentario
    			if quoteCount%2 == 0 {
    				break
    			}
    		}
    
    		newLine = append(newLine, line[i])
    	}
    
    	return newLine
    }

Probar la función de análisis de comentarios JSON

En este paso, aprenderás a probar la función de análisis de comentarios JSON. Sigue los pasos siguientes para completar este paso:

  1. Abre una terminal y navega hasta el directorio /home/labex/project.

  2. Ejecuta el siguiente comando para ejecutar las pruebas:

    $ cd /home/labex/project
    $ /usr/local/go/bin/go test
  3. Si las pruebas pasan, verás la siguiente salida:

    PASS
    ok      jsonex  0.002s
  4. Si encuentras un error de tiempo de espera, ejecuta los siguientes comandos en la terminal y luego haz clic en el botón de reinspección para aprobar la comprobación:

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

¡Felicitaciones! Has implementado con éxito la función de análisis de comentarios JSON y la has probado. Ahora puedes usar esta función en tu proyecto.

✨ Revisar Solución y Practicar

Resumen

¡Felicitaciones! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.