The objective of this project is to demonstrate how to read a JSON file in text mode and navigate through its objects. The implementation is provided in the following programming languages: JavaScript (js), Python, Java, and C#.
Para o JS utilizamos o export
para exportar o conteúdo do jsonData como um módulo. Neste caso, usamos a sintaxe da ECMAScript Modules (ESM).
// file.json
export const jsonData = [
...
];
// read-file.json
import { jsonData } from "./file.js";
Ocorreram alguns problemas utilizando a lib datetime
do Python na leitura do valor do timestamp no formato UTC (ISO 8601 format).
ValueError: Invalid isoformat string: '2023-12-06T16:34:56Z'
- method doesn't directly support the 'Z' notation for Zulu time (UTC).
Para lidar com este erro, é necessário utilizar a lib python-dateutil
. Para isso, é necessário seguir os passos abaixo para instalar o mesmo
pip install python-dateutil
Em seguida, no código é necessário utilizar a função abaixo:
from dateutil import parser
# Function to parse the timestamp into a datetime object
def parse_timestamp(timestamp):
return parser.isoparse(timestamp)
for course in jsonData:
print(f"Curso: {course['title']}")
for lesson in course['lessons']:
print(f" Aula {lesson['id']}: {lesson['title']}")
print(f" Media: {lesson['media']}")
print(f" Timestamp: {parse_timestamp(lesson['timestamp'])}")
print()
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
A lib do Jackson
não está configurado para lidar com tipos de data/hora do Java 8 (java.time.Instant) por padrão, para corrigir, seguir os passos abaixo:
-
Adicionar o módulo jackson-datatype-jsr310 ao seu projeto.
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.13.0</version> </dependency>
-
Configurar o ObjectMapper para registrar o módulo.
public static void main(String[] args) { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule()); ... }
Você pode fazer isso usando o método readValue com a classe TypeReference
Utilizar o método readValue com a classe TypeReference, conforme exemplo abaixo:
List<Course> courses = objectMapper.readValue(jsonFile, new TypeReference<List<Course>>() {});
Para adicionar a lib Newtonsoft.Json
usando o NuGet Package Manager ou o dotnet CLI:
dotnet add package Newtonsoft.Json
-
Adicione o arquivo JSON ao projeto:
- Crie ou copie seu arquivo JSON para o diretório do seu projeto.
- No Visual Studio, clique com o botão direito do mouse no diretório do projeto no Solution Explorer.
- Escolha "Add" > "Existing Item" e selecione seu arquivo JSON.
-
Configure a cópia para o diretório de saída:
- Selecione o arquivo JSON no Solution Explorer.
- No painel de propriedades, defina a propriedade "Copy to Output Directory" para "Copy if newer" ou "Copy always".
- Dessa forma, o arquivo JSON será copiado para o diretório de saída (por exemplo, bin\Debug ou bin\Release) quando você compilar o projeto, e você pode usar o caminho relativo para acessá-lo durante a execução do aplicativo.