En aquesta pràctica crearàs el catàleg de productes d’una botiga d’esports en línia utilitzant JSON i les tecnologies associades que hem estudiat. El catàleg inclourà informació detallada sobre cada producte: nom, descripció, preu, estoc, variants (talles i colors), ressenyes d’usuaris, etc.
L’objectiu és demostrar el domini de JSON com a format d’intercanvi de dades: des de la creació d’un document ben estructurat fins a la seva validació amb JSON Schema i el processament amb l’eina jq. La pràctica està estructurada en tres blocs de dificultat progressiva, de manera que pots anar construint el projecte pas a pas i obtenir puntuació parcial segons el nivell assolit.
Objectius #
Els objectius generals de cada bloc són:
| Bloc | Objectius |
|---|---|
| 1 | Demostrar el domini de la sintaxi i estructura JSON, prenent decisions de disseny raonades |
| 2 | Crear un esquema JSON Schema per validar el document |
| 3 | Processar el document amb consultes jq |
Lliurables #
Els lliurables de la pràctica són els següents:
| Fitxer | Descripció | Bloc |
|---|---|---|
botiga.json |
Document JSON principal | 1 |
README.md |
Document explicant les decisions de disseny | 1 |
botiga.schema.json |
Esquema de validació JSON Schema | 2 |
CONSULTES.md |
Document amb les consultes jq i els seus resultats | 3 |
Bloc 1: Document JSON #
En aquest bloc crearàs el document JSON principal de la botiga d’esports i documentaràs les decisions de disseny que has pres.
Requisits del document #
El document botiga.json ha de contenir:
-
Informació de la botiga amb:
- Nom de la botiga.
- Eslògan.
- Any de fundació.
- Dades de contacte (email, telèfon, adreça).
- Xarxes socials (almanco 2).
-
Categories de productes (mínim 4) amb:
- Identificador únic.
- Nom de la categoria.
- Descripció breu.
Exemples de categories: Running, Fitness, Natació, Ciclisme, Futbol, Bàsquet, Tennis, Muntanya…
-
Entre 15 i 20 productes amb la següent informació per a cadascun:
- Identificador únic (SKU).
- Nom del producte.
- Descripció.
- Marca.
- Categoria (referència a l’identificador de categoria).
- Preu (amb moneda).
- Preu amb descompte (si n’hi ha, pot ser
null). - Estoc disponible.
- Valoració mitjana (0-5).
- Nombre de valoracions.
- Data d’incorporació al catàleg.
- Disponible (booleà).
- Imatges (array d’URLs).
- Etiquetes (array de paraules clau).
-
Variants de producte per a almenys 4 productes de roba o calçat:
- Talla (XS, S, M, L, XL o números per a calçat).
- Color.
- Estoc específic de la variant.
- SKU de la variant (derivat del SKU principal).
Exemple: Una samarreta tècnica pot tenir variants per a cada combinació de talla i color.
-
Ressenyes d’usuaris per a almenys 4 productes, amb:
- Nom de l’usuari.
- Puntuació (1-5).
- Comentari.
- Data de la ressenya.
- Verificat (booleà: indica si l’usuari ha comprat el producte).
-
Ús dels 6 tipus de dades JSON:
string: noms, descripcions, URLs…number: preus, estocs, puntuacions…boolean: disponibilitat, verificat…null: descompte inexistent, camps opcionals…object: producte, ressenya, informació de contacte…array: categories, productes, variants, imatges, etiquetes…
Decisions de disseny #
El document README.md ha d’explicar breument (1-2 pàgines en format Markdown) les decisions de disseny que has pres:
-
Estructura general: Com has organitzat el document? Per què?
-
Categories: Les categories són un array independent o estan imbricades dins dels productes? Com fas referència a la categoria d’un producte?
-
Variants: Com has representat les variants de producte? Són objectes dins d’un array? Quins camps tenen?
-
Ressenyes: Les ressenyes estan dins de cada producte o en una estructura separada? Per què?
-
Convencions de noms: Has usat
camelCase,snake_caseo una altra convenció? Per què? -
Altres decisions: Qualsevol altra decisió rellevant que vulguis justificar.
Aprofita aquest document per afegir la documentació o context que consideris necessari a l’hora de fer la correcció.
Bloc 2: JSON Schema #
En aquest bloc crearàs un esquema JSON Schema per validar el document botiga.json. L’esquema ha de garantir que qualsevol document que hi validi compleix l’estructura i les restriccions definides.
Requisits de l’esquema #
El fitxer botiga.schema.json ha d’incloure:
-
Metadades de l’esquema:
$schema: Versió de JSON Schema (https://json-schema.org/draft/2020-12/schema).$id: Identificador únic de l’esquema.title: Títol descriptiu.description: Descripció de l’esquema.
-
Tipus de dades correctes per a cada camp:
stringper a textos.numberointegersegons correspongui.booleanper a valors lògics.arrayper a llistes.objectper a objectes imbricats.
-
Camps obligatoris amb
required:- L’esquema ha d’indicar quins camps són obligatoris a cada nivell.
- Per exemple: un producte ha de tenir obligatòriament
sku,nom,preuiestoc.
-
Restriccions numèriques:
- Preu:
minimum: 0(no pot ser negatiu). - Preu amb descompte: menor que el preu original (o
null). - Estoc:
minimum: 0. - Valoració:
minimum: 0,maximum: 5. - Puntuació de ressenya:
minimum: 1,maximum: 5.
- Preu:
-
Restriccions de cadenes:
- SKU: Patró amb
pattern(per exemple,^[A-Z]{2,4}-[0-9]{3,5}$per a codis comRUN-001oFIT-1234). - Email:
format: "email". - Data:
format: "date". - URL d’imatges:
format: "uri".
- SKU: Patró amb
-
Enumeracions amb
enum:- Talles de roba:
["XS", "S", "M", "L", "XL", "XXL"]. - Moneda:
["EUR", "USD", "GBP"]. - Colors disponibles (defineix 6-8 colors).
- Talles de roba:
-
Reutilització amb
$defsi$ref:- Defineix subesquemes reutilitzables per a: producte, variant, ressenya.
- Referencia’ls amb
$refon calgui. - Això evita duplicar definicions i fa l’esquema més mantenible.
Validació #
Per validar el document JSON amb l’esquema, pots usar:
jsonschema --instance botiga.json botiga.schema.jsonSi la validació és correcta, la comanda no mostrarà cap sortida. Si hi ha errors, mostrarà missatges indicant quin camp falla i per què.
Bloc 3: Processament #
En aquest bloc demostraràs que saps usar l’eina jq per extreure, filtrar i processar dades del document JSON.
Requisits #
El document CONSULTES.md ha de contenir totes les següents consultes jq de la llista següent, o equivalents adaptades al teu document:
- Llistar tots els noms de productes.
- Filtrar productes d’una categoria específica, per exemple, tots els productes de “Running”.
- Filtrar productes amb preu inferior a X euros, per exemple, productes per sota de 50€.
- Filtrar productes amb descompte, és a dir, on
preuDescompteno siguinull. - Comptar el nombre total de productes.
- Comptar el nombre de productes per categoria.
- Calcular el preu mitjà dels productes.
- Calcular la suma total de l’estoc disponible.
- Mostrar productes amb estoc 0, és a dir, no disponibles.
- Extreure només el nom i el preu de cada producte (projecció de camps).
- Ordenar productes per preu (ascendent o descendent).
- Mostrar el producte amb millor valoració.
Per a cada consulta, has d’incloure:
- La comanda
jqcompleta. - El resultat obtingut, o un extracte si és molt llarg.
- Una breu explicació del que fa la consulta.
Format del document #
El document CONSULTES.md ha de seguir aquest format:
- Un títol (nivell 1) del document
- Un subtítol (nivell 2) per a cada consulta, amb el nom de la consulta.
- La comanda a executar, formatada. Exemple:
bash jq '.productes[].nom' botiga.json - El resultat de la comanda, formatat. Exemple:
text "Sabatilles running Nike Air Zoom" "Samarreta tècnica Adidas" "Pilota de futbol Adidas UCL" ... - L’explicació del que fa la consulta, per exemple: “Aquesta consulta accedeix a l’array
productesi extreu el campnomde cada element”.
Autoavaluació #
Abans de lliurar la pràctica, pots usar les següents comandes per verificar la feina feta. Necessitaràs instal·lar els paquets jq i python3-jsonschema. Si no les tens instal·lades:
sudo apt install jq python3-jsonschemaBloc 1: Document JSON #
Verifica que el document JSON està ben format:
jq empty botiga.jsonSi no hi ha errors, la comanda no mostrarà cap sortida. Si el JSON està mal format, mostrarà un missatge d’error indicant la línia i el problema.
Mostra el document formatat per revisar-lo visualment:
jq '.' botiga.json | head -100Compta el nombre de productes:
jq '.productes | length' botiga.jsonVerifica que tots els productes tenen els camps obligatoris (adapta els noms de camps segons la teva estructura):
jq '.productes[] | select(.sku == null or .nom == null or .preu == null)' botiga.jsonSi aquesta consulta no retorna res, tots els productes tenen els camps obligatoris.
Compta productes amb variants:
jq '[.productes[] | select(.variants != null)] | length' botiga.jsonCompta productes amb ressenyes:
jq '[.productes[] | select(.ressenyes != null and (.ressenyes | length) > 0)] | length' botiga.jsonBloc 2: JSON Schema #
Verifica que l’esquema JSON Schema està ben format:
jq empty botiga.schema.jsonValida el document contra l’esquema:
jsonschema --instance botiga.json botiga.schema.jsonVerifica que l’esquema usa $defs per reutilització:
jq 'has("$defs")' botiga.schema.jsonCompta el nombre de definicions reutilitzables:
jq '."$defs" | keys | length' botiga.schema.jsonVerifica que l’esquema inclou restriccions (cerca patrons, enumeracions i restriccions numèriques):
grep -c '"pattern"' botiga.schema.json
grep -c '"enum"' botiga.schema.json
grep -c '"minimum"\|"maximum"' botiga.schema.jsonBloc 3: Consultes jq #
Verifica que el document CONSULTES.md existeix i conté totes les consultes:
grep -c '```bash' CONSULTES.mdExecuta cada consulta del document per verificar que funciona correctament. Si alguna consulta dona error, revisa la sintaxi.
Llista de verificació #
Pots usar aquesta llista per fer un seguiment de l’autoavaluació:
Bloc 1: Document JSON
- Document JSON ben format (sense errors de sintaxi).
- Informació de la botiga completa.
- Mínim 4 categories.
- Entre 15 i 20 productes.
- Tots els camps requerits per producte.
- Mínim 4 productes amb variants.
- Mínim 4 productes amb ressenyes.
- Ús dels 6 tipus de dades JSON.
- Document
README.mdamb explicacions clares.
Bloc 2: JSON Schema
- Esquema JSON Schema ben format.
- Metadades (
$schema,$id,title,description). - Tipus de dades correctes.
- Camps obligatoris amb
required. - Restriccions numèriques (
minimum,maximum). - Restriccions de cadenes (
pattern,format). - Enumeracions (
enum). - Reutilització amb
$defsi$ref. - Validació correcta del document.
Bloc 3: Consultes jq
- Document
CONSULTES.mdamb format correcte. - Les 12 consultes.
- Cada consulta inclou: comanda, resultat i explicació.
- Les consultes funcionen correctament.
- Varietat de consultes (extracció, filtrat, agregació).