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)
|
|
|
|
![Thirty Days Of JavaScript](../../images/banners/day_1_16.png)
|
|
|
|
- [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)
|