You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							599 lines
						
					
					
						
							14 KiB
						
					
					
				
			
		
		
	
	
							599 lines
						
					
					
						
							14 KiB
						
					
					
				| <div align="center">
 | |
|   <h1> 30 Days Of JavaScript: JSON</h1>
 | |
|   <a class="header-badge" target="_blank" href="https://www.linkedin.com/in/asabeneh/">
 | |
|   <img src="https://img.shields.io/badge/style--5eba00.svg?label=LinkedIn&logo=linkedin&style=social">
 | |
|   </a>
 | |
|   <a class="header-badge" target="_blank" href="https://twitter.com/Asabeneh">
 | |
|   <img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/asabeneh?style=social">
 | |
|   </a>
 | |
| 
 | |
| <sub>Autore:
 | |
| <a href="https://www.linkedin.com/in/asabeneh/" target="_blank">Asabeneh Yetayeh</a><br>
 | |
| <small> Gennaio, 2020</small>
 | |
| </sub>
 | |
| 
 | |
| </div>
 | |
| 
 | |
| [<< Day 15](../15_Day_Classes/15_day_classes.md) | [Day 17 >>](../17_Day_Web_storages/17_day_web_storages.md)
 | |
| 
 | |
| 
 | |
| 
 | |
| - [Day 16](#day-16)
 | |
| 	- [JSON](#json)
 | |
| 		- [Convertire un JSON in Oggetto JavaScript ](#converting-json-to-javascript-object)
 | |
| 			- [JSON.parse()](#jsonparse)
 | |
| 		- [Usare una funzione reviver con JSON.parse()](#using-a-reviver-function-with-jsonparse)
 | |
| 		- [Convertire un Oggetto in JSON](#converting-object-to-json)
 | |
| 		- [Usare un Filter Array con JSON.stringify](#using-a-filter-array-with-jsonstringify)
 | |
| 	- [Esercizi](#exercises)
 | |
| 		- [Esercizi Livello 1](#exercises-level-1)
 | |
| 		- [Esercizi Livello 2](#exercises-level-2)
 | |
| 		- [Esercizi Livello 3](#exercises-level-3)
 | |
| 
 | |
| # Day 16
 | |
| 
 | |
| ## JSON
 | |
| 
 | |
| JSON è l'acronimo di JavaScript Object Notation. La sintassi JSON deriva dalla sintassi della notazione degli oggetti JavaScript, ma il formato JSON è solo testo o stringa. JSON è un formato di dati leggero per la memorizzazione e il trasporto. JSON viene utilizzato soprattutto quando i dati vengono inviati da un server a un client. JSON è un'alternativa più facile da usare rispetto a XML.
 | |
| 
 | |
| **Esempio:**
 | |
| 
 | |
| ```js
 | |
| {
 | |
| "users":[
 | |
|   {
 | |
|     "firstName":"Asabeneh",
 | |
|     "lastName":"Yetayeh",
 | |
|     "age":250,
 | |
|     "email":"asab@asb.com"
 | |
|   },
 | |
|   {
 | |
|     "firstName":"Alex",
 | |
|     "lastName":"James",
 | |
|     "age":25,
 | |
|     "email":"alex@alex.com"
 | |
|   },
 | |
|   {
 | |
|   "firstName":"Lidiya",
 | |
|   "lastName":"Tekle",
 | |
|   "age":28,
 | |
|   "email":"lidiya@lidiya.com"
 | |
|   }
 | |
| ]
 | |
| }
 | |
| ```
 | |
| 
 | |
| L'esempio JSON di cui sopra non è molto diverso da un normale oggetto. Allora, qual è la differenza? La differenza sta nel fatto che la chiave di un oggetto JSON deve essere con doppi apici o deve essere una stringa. Gli oggetti JavaScript e JSON sono molto simili, tanto che possiamo cambiare JSON in oggetto e oggetto in JSON.
 | |
| 
 | |
| Vediamo in dettaglio l'esempio precedente, che inizia con una parentesi graffa. All'interno della parentesi graffa, c'è la chiave "utenti" che ha un array di valori. All'interno dell'array abbiamo diversi oggetti e ogni oggetto ha delle chiavi, ogni chiave deve avere i doppi apici. Per esempio, usiamo "firstNaMe" invece del semplice firstName, ma negli oggetti usiamo chiavi senza doppi apici. Questa è la differenza principale tra un oggetto e un JSON. Vediamo altri esempi di JSON.
 | |
| 
 | |
| **Esempio:**
 | |
| 
 | |
| ```js
 | |
| {
 | |
|     "Alex": {
 | |
|         "email": "alex@alex.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript"
 | |
|         ],
 | |
|         "age": 20,
 | |
|         "isLoggedIn": false,
 | |
|         "points": 30
 | |
|     },
 | |
|     "Asab": {
 | |
|         "email": "asab@asab.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript",
 | |
|             "Redux",
 | |
|             "MongoDB",
 | |
|             "Express",
 | |
|             "React",
 | |
|             "Node"
 | |
|         ],
 | |
|         "age": 25,
 | |
|         "isLoggedIn": false,
 | |
|         "points": 50
 | |
|     },
 | |
|     "Brook": {
 | |
|         "email": "daniel@daniel.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript",
 | |
|             "React",
 | |
|             "Redux"
 | |
|         ],
 | |
|         "age": 30,
 | |
|         "isLoggedIn": true,
 | |
|         "points": 50
 | |
|     },
 | |
|     "Daniel": {
 | |
|         "email": "daniel@alex.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript",
 | |
|             "Python"
 | |
|         ],
 | |
|         "age": 20,
 | |
|         "isLoggedIn": false,
 | |
|         "points": 40
 | |
|     },
 | |
|     "John": {
 | |
|         "email": "john@john.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript",
 | |
|             "React",
 | |
|             "Redux",
 | |
|             "Node.js"
 | |
|         ],
 | |
|         "age": 20,
 | |
|         "isLoggedIn": true,
 | |
|         "points": 50
 | |
|     },
 | |
|     "Thomas": {
 | |
|         "email": "thomas@thomas.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript",
 | |
|             "React"
 | |
|         ],
 | |
|         "age": 20,
 | |
|         "isLoggedIn": false,
 | |
|         "points": 40
 | |
|     },
 | |
|     "Paul": {
 | |
|         "email": "paul@paul.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript",
 | |
|             "MongoDB",
 | |
|             "Express",
 | |
|             "React",
 | |
|             "Node"
 | |
|         ],
 | |
|         "age": 20,
 | |
|         "isLoggedIn": false,
 | |
|         "points": 40
 | |
|     }
 | |
| }
 | |
| ```
 | |
| 
 | |
| ### Convertire un JSON in Oggetto JavaScript 
 | |
| 
 | |
| In genere si recuperano dati JSON dalla risposta HTTP o da un file, ma è possibile memorizzare il JSON come stringa e, a scopo dimostrativo, trasformarlo in oggetto. In JavaScript la parola chiave _JSON_ ha i metodi _parse()_ e _stringify()_. Quando vogliamo cambiare il JSON in un oggetto, lo analizziamo usando _JSON.parse()_. Quando vogliamo cambiare l'oggetto in JSON, usiamo _JSON.stringify()_.
 | |
| 
 | |
| #### JSON.parse()
 | |
| 
 | |
| ```js
 | |
| JSON.parse(json[, reviver])
 | |
| // json or text , the data
 | |
| // reviver is an optional callback function
 | |
| /* JSON.parse(json, (key, value) => {
 | |
| 
 | |
| })
 | |
| */
 | |
| ```
 | |
| 
 | |
| ```js
 | |
| const usersText = `{
 | |
| "users":[
 | |
|   {
 | |
|     "firstName":"Asabeneh",
 | |
|     "lastName":"Yetayeh",
 | |
|     "age":250,
 | |
|     "email":"asab@asb.com"
 | |
|   },
 | |
|   {
 | |
|     "firstName":"Alex",
 | |
|     "lastName":"James",
 | |
|     "age":25,
 | |
|     "email":"alex@alex.com"
 | |
|   },
 | |
|   {
 | |
|   "firstName":"Lidiya",
 | |
|   "lastName":"Tekle",
 | |
|   "age":28,
 | |
|   "email":"lidiya@lidiya.com"
 | |
|   }
 | |
| ]
 | |
| }`
 | |
| 
 | |
| const usersObj = JSON.parse(usersText, undefined, 4)
 | |
| console.log(usersObj)
 | |
| ```
 | |
| 
 | |
| ### Usare una funzione reviver con JSON.parse()
 | |
| 
 | |
| Per utilizzare la funzione reviver come formattatore, si inseriscono le chiavi con cui si vuole formattare i valori di nome e cognome. Supponiamo di essere interessati a formattare il nome e il cognome dei dati JSON.
 | |
| 
 | |
| ```js
 | |
| const usersText = `{
 | |
| "users":[
 | |
|   {
 | |
|     "firstName":"Asabeneh",
 | |
|     "lastName":"Yetayeh",
 | |
|     "age":250,
 | |
|     "email":"asab@asb.com"
 | |
|   },
 | |
|   {
 | |
|     "firstName":"Alex",
 | |
|     "lastName":"James",
 | |
|     "age":25,
 | |
|     "email":"alex@alex.com"
 | |
|   },
 | |
|   {
 | |
|   "firstName":"Lidiya",
 | |
|   "lastName":"Tekle",
 | |
|   "age":28,
 | |
|   "email":"lidiya@lidiya.com"
 | |
|   }
 | |
| ]
 | |
| }`
 | |
| 
 | |
| const usersObj = JSON.parse(usersText, (key, value) => {
 | |
|   let newValue =
 | |
|     typeof value == 'string' && key != 'email' ? value.toUpperCase() : value
 | |
|   return newValue
 | |
| })
 | |
| console.log(usersObj)
 | |
| ```
 | |
| 
 | |
| Il metodo _JSON.parse()_ è molto comodo da usare. Non è necessario passare un parametro opzionale, basta usarlo con il parametro richiesto e si otterrà molto.
 | |
| 
 | |
| ### Convertire un Oggetto in JSON
 | |
| 
 | |
| Quando vogliamo cambiare l'oggetto in JSON, usiamo _JSON.stringify()_. Il metodo stringify accetta un parametro obbligatorio e due parametri opzionali. Il sostituente è usato come filtro e lo spazio è una rientranza. Se non si vuole filtrare nessuna delle chiavi dell'oggetto, si può passare semplicemente undefined.
 | |
| 
 | |
| ```js
 | |
| JSON.stringify(obj, replacer, space)
 | |
| // json or text , the data
 | |
| // reviver is an optional callback function
 | |
| ```
 | |
| 
 | |
| Convertiamo il seguente oggetto in una stringa. Per prima cosa manteniamo tutte le chiavi e manteniamo un'indentazione di 4 spazi.
 | |
| 
 | |
| ```js
 | |
| const users = {
 | |
|   Alex: {
 | |
|     email: 'alex@alex.com',
 | |
|     skills: ['HTML', 'CSS', 'JavaScript'],
 | |
|     age: 20,
 | |
|     isLoggedIn: false,
 | |
|     points: 30
 | |
|   },
 | |
|   Asab: {
 | |
|     email: 'asab@asab.com',
 | |
|     skills: [
 | |
|       'HTML',
 | |
|       'CSS',
 | |
|       'JavaScript',
 | |
|       'Redux',
 | |
|       'MongoDB',
 | |
|       'Express',
 | |
|       'React',
 | |
|       'Node'
 | |
|     ],
 | |
|     age: 25,
 | |
|     isLoggedIn: false,
 | |
|     points: 50
 | |
|   },
 | |
|   Brook: {
 | |
|     email: 'daniel@daniel.com',
 | |
|     skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Redux'],
 | |
|     age: 30,
 | |
|     isLoggedIn: true,
 | |
|     points: 50
 | |
|   },
 | |
|   Daniel: {
 | |
|     email: 'daniel@alex.com',
 | |
|     skills: ['HTML', 'CSS', 'JavaScript', 'Python'],
 | |
|     age: 20,
 | |
|     isLoggedIn: false,
 | |
|     points: 40
 | |
|   },
 | |
|   John: {
 | |
|     email: 'john@john.com',
 | |
|     skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Redux', 'Node.js'],
 | |
|     age: 20,
 | |
|     isLoggedIn: true,
 | |
|     points: 50
 | |
|   },
 | |
|   Thomas: {
 | |
|     email: 'thomas@thomas.com',
 | |
|     skills: ['HTML', 'CSS', 'JavaScript', 'React'],
 | |
|     age: 20,
 | |
|     isLoggedIn: false,
 | |
|     points: 40
 | |
|   },
 | |
|   Paul: {
 | |
|     email: 'paul@paul.com',
 | |
|     skills: [
 | |
|       'HTML',
 | |
|       'CSS',
 | |
|       'JavaScript',
 | |
|       'MongoDB',
 | |
|       'Express',
 | |
|       'React',
 | |
|       'Node'
 | |
|     ],
 | |
|     age: 20,
 | |
|     isLoggedIn: false,
 | |
|     points: 40
 | |
|   }
 | |
| }
 | |
| 
 | |
| const txt = JSON.stringify(users, undefined, 4)
 | |
| console.log(txt) // text means JSON- because json is a string form of an object.
 | |
| ```
 | |
| 
 | |
| ```sh
 | |
| {
 | |
|     "Alex": {
 | |
|         "email": "alex@alex.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript"
 | |
|         ],
 | |
|         "age": 20,
 | |
|         "isLoggedIn": false,
 | |
|         "points": 30
 | |
|     },
 | |
|     "Asab": {
 | |
|         "email": "asab@asab.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript",
 | |
|             "Redux",
 | |
|             "MongoDB",
 | |
|             "Express",
 | |
|             "React",
 | |
|             "Node"
 | |
|         ],
 | |
|         "age": 25,
 | |
|         "isLoggedIn": false,
 | |
|         "points": 50
 | |
|     },
 | |
|     "Brook": {
 | |
|         "email": "daniel@daniel.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript",
 | |
|             "React",
 | |
|             "Redux"
 | |
|         ],
 | |
|         "age": 30,
 | |
|         "isLoggedIn": true,
 | |
|         "points": 50
 | |
|     },
 | |
|     "Daniel": {
 | |
|         "email": "daniel@alex.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript",
 | |
|             "Python"
 | |
|         ],
 | |
|         "age": 20,
 | |
|         "isLoggedIn": false,
 | |
|         "points": 40
 | |
|     },
 | |
|     "John": {
 | |
|         "email": "john@john.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript",
 | |
|             "React",
 | |
|             "Redux",
 | |
|             "Node.js"
 | |
|         ],
 | |
|         "age": 20,
 | |
|         "isLoggedIn": true,
 | |
|         "points": 50
 | |
|     },
 | |
|     "Thomas": {
 | |
|         "email": "thomas@thomas.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript",
 | |
|             "React"
 | |
|         ],
 | |
|         "age": 20,
 | |
|         "isLoggedIn": false,
 | |
|         "points": 40
 | |
|     },
 | |
|     "Paul": {
 | |
|         "email": "paul@paul.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript",
 | |
|             "MongoDB",
 | |
|             "Express",
 | |
|             "React",
 | |
|             "Node"
 | |
|         ],
 | |
|         "age": 20,
 | |
|         "isLoggedIn": false,
 | |
|         "points": 40
 | |
|     }
 | |
| }
 | |
| ```
 | |
| 
 | |
| ### Usare un Filter Array con JSON.stringify
 | |
| 
 | |
| Ora, usiamo il replacer come filtro. L'oggetto utente ha un lungo elenco di chiavi, ma a noi interessano solo alcune di esse. Mettiamo le chiavi che vogliamo conservare in un array, come mostrato nell'esempio, e lo usiamo al posto del replacer.
 | |
| 
 | |
| ```js
 | |
| const user = {
 | |
|   firstName: 'Asabeneh',
 | |
|   lastName: 'Yetayeh',
 | |
|   country: 'Finland',
 | |
|   city: 'Helsinki',
 | |
|   email: 'alex@alex.com',
 | |
|   skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Python'],
 | |
|   age: 250,
 | |
|   isLoggedIn: false,
 | |
|   points: 30
 | |
| }
 | |
| 
 | |
| const txt = JSON.stringify(user,['firstName', 'lastName', 'country', 'city', 'age'],4)
 | |
| console.log(txt)
 | |
| ```
 | |
| 
 | |
| ```sh
 | |
| {
 | |
|     "firstName": "Asabeneh",
 | |
|     "lastName": "Yetayeh",
 | |
|     "country": "Finland",
 | |
|     "city": "Helsinki",
 | |
|     "age": 250
 | |
| }
 | |
| ```
 | |
| 
 | |
| 🌕 Sei straordinario.  Ora conosci un formato di dati leggero che puoi usare per memorizzare i dati o per inviarli a un server HTTP. Sei a 16 passi dalla tua strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
 | |
| 
 | |
| ## Esercizi
 | |
| 
 | |
| ```js
 | |
| const skills = ['HTML', 'CSS', 'JS', 'React','Node', 'Python']
 | |
| let age = 250;
 | |
| let isMarried = true
 | |
| const student = {
 | |
|   firstName:'Asabeneh',
 | |
|   lastName:'Yetayehe',
 | |
|   age:250,
 | |
|   isMarried:true,
 | |
|   skills:['HTML', 'CSS', 'JS', 'React','Node', 'Python', ]
 | |
| }
 | |
| const txt = `{
 | |
|     "Alex": {
 | |
|         "email": "alex@alex.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript"
 | |
|         ],
 | |
|         "age": 20,
 | |
|         "isLoggedIn": false,
 | |
|         "points": 30
 | |
|     },
 | |
|     "Asab": {
 | |
|         "email": "asab@asab.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript",
 | |
|             "Redux",
 | |
|             "MongoDB",
 | |
|             "Express",
 | |
|             "React",
 | |
|             "Node"
 | |
|         ],
 | |
|         "age": 25,
 | |
|         "isLoggedIn": false,
 | |
|         "points": 50
 | |
|     },
 | |
|     "Brook": {
 | |
|         "email": "daniel@daniel.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript",
 | |
|             "React",
 | |
|             "Redux"
 | |
|         ],
 | |
|         "age": 30,
 | |
|         "isLoggedIn": true,
 | |
|         "points": 50
 | |
|     },
 | |
|     "Daniel": {
 | |
|         "email": "daniel@alex.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript",
 | |
|             "Python"
 | |
|         ],
 | |
|         "age": 20,
 | |
|         "isLoggedIn": false,
 | |
|         "points": 40
 | |
|     },
 | |
|     "John": {
 | |
|         "email": "john@john.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript",
 | |
|             "React",
 | |
|             "Redux",
 | |
|             "Node.js"
 | |
|         ],
 | |
|         "age": 20,
 | |
|         "isLoggedIn": true,
 | |
|         "points": 50
 | |
|     },
 | |
|     "Thomas": {
 | |
|         "email": "thomas@thomas.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript",
 | |
|             "React"
 | |
|         ],
 | |
|         "age": 20,
 | |
|         "isLoggedIn": false,
 | |
|         "points": 40
 | |
|     },
 | |
|     "Paul": {
 | |
|         "email": "paul@paul.com",
 | |
|         "skills": [
 | |
|             "HTML",
 | |
|             "CSS",
 | |
|             "JavaScript",
 | |
|             "MongoDB",
 | |
|             "Express",
 | |
|             "React",
 | |
|             "Node"
 | |
|         ],
 | |
|         "age": 20,
 | |
|         "isLoggedIn": false,
 | |
|         "points": 40
 | |
|     }
 | |
| }
 | |
| `
 | |
| ```
 | |
| 
 | |
| ### Esercizi Livello 1
 | |
| 
 | |
| 1. Cambiare l'array di competenze in JSON usando JSON.stringify()
 | |
| 1. Stringere la variabile età
 | |
| 1. Stringere la variabile isMarried
 | |
| 1. Stringere l'oggetto studente
 | |
| 
 | |
| ### Esercizi Livello 2
 | |
| 
 | |
| 1. Stringificare l'oggetto studenti con le sole proprietà firstName, lastName e skills
 | |
| 
 | |
| ### Esercizi Livello 3
 | |
| 
 | |
| 1. Analizzare il JSON *txt* in un oggetto.
 | |
| 2. Trovare l'utente che ha molte competenze dalla variabile memorizzata in *txt*.
 | |
| 
 | |
| 🎉 CONGRATULAZIONI ! 🎉
 | |
| 
 | |
| [<< Day 15](../15_Day_Classes/15_day_classes.md) | [Day 17 >>](../17_Day_Web_storages/17_day_web_storages.md)
 |