JSON come GET parameter

di Lorenzo Neri

JSON come GET parameter: si può impostare un oggetto JSON come parametro GET? Sì, diversamente non esisterebbe questo articolo dove ne parlo!

All’interno del mondo web, senza dubbio se ci programmi non potrai fare a meno di ciò che è il JSON nella sua interezza. Mi sono capitati pochi “corner case” a riguardo e uno fra tutti è proprio l’oggetto di questo articolo.

Mi è capitato a livello lavorativo questa situazione: “Si potrà mai utilizzare un oggetto o addirittura un array in formato JSON come parametro e dunque come GET parameter in una richiesta HTTP?”.

La risposta è “Ma certo che sì!”, di fatto ne parliamo proprio ora: ma prima permettimi di dirti chi sono per parlarne.

Mi chiamo Lorenzo Neri e sono un informatico: questo articolo, come raccontavo poco fa, è frutto di errori e soluzioni nate durante la mia vita professionale. E quale miglior modo se non creando articoli come questo per aiutare persone come te?

Incominciamo.

Impostare un oggetto e/o un array JSON come parametro GET in una richiesta HTTP

Prima di creare confusione fra i vari protocolli del mondo dello sviluppo web, quando dico “GET parameter” faccio riferimento al metodo GET del protocollo HTTP.

Chiarito questo, immagina di avere il seguente JSON:

{
    "glossary": {
        "title": "example glossary",
		"GlossDiv": {
            "title": "S",
			"GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
					"SortAs": "SGML",
					"GlossTerm": "Standard Generalized Markup Language",
					"Acronym": "SGML",
					"Abbrev": "ISO 8879:1986",
					"GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
						"GlossSeeAlso": ["GML", "XML"]
                    },
					"GlossSee": "markup"
                }
            }
        }
    }
}

Se ti stessi chiedendo da dove l’ho tirato fuori, esiste un sito web utilissimo per fare degli esempi JSON: di fatto si chiama https://json.org/example.html 😀

Ora, messo così, se lo impostassi come parametro GET di una richiesta HTTP, una roba stile:

https://www.il_tuo_sito.com?parametro={
    "glossary": {
        "title": "example glossary",
		"GlossDiv": {
            "title": "S",
			"GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
					"SortAs": "SGML",
					"GlossTerm": "Standard Generalized Markup Language",
					"Acronym": "SGML",
					"Abbrev": "ISO 8879:1986",
					"GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
						"GlossSeeAlso": ["GML", "XML"]
                    },
					"GlossSee": "markup"
                }
            }
        }
    }
}

… Sono abbastanza certo che qualche erroraccio al tuo back-end o solo già dalla chiamata stessa salta fuori.

E quindi come impostare del JSON come GET parameter?

È necessario fare l’encoding di tutti i caratteri particolari fra cui parantesi, punti e virgola eccetera che compongono il tuo stesso JSON!

Per intenderci, dobbiamo rendere il JSON stesso URL-encorded e prendendo l’esempio precedente, verrebbe fuori così:

%7B%0A%20%20%20%20%22glossary%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%22title%22%3A%20%22example%20glossary%22%2C%0A%09%09%22GlossDiv%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22title%22%3A%20%22S%22%2C%0A%09%09%09%22GlossList%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22GlossEntry%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22ID%22%3A%20%22SGML%22%2C%0A%09%09%09%09%09%22SortAs%22%3A%20%22SGML%22%2C%0A%09%09%09%09%09%22GlossTerm%22%3A%20%22Standard%20Generalized%20Markup%20Language%22%2C%0A%09%09%09%09%09%22Acronym%22%3A%20%22SGML%22%2C%0A%09%09%09%09%09%22Abbrev%22%3A%20%22ISO%208879%3A1986%22%2C%0A%09%09%09%09%09%22GlossDef%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22para%22%3A%20%22A%20meta-markup%20language%2C%20used%20to%20create%20markup%20languages%20such%20as%20DocBook.%22%2C%0A%09%09%09%09%09%09%22GlossSeeAlso%22%3A%20%5B%22GML%22%2C%20%22XML%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%09%09%09%09%09%22GlossSee%22%3A%20%22markup%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D

In questo modo, se imposti l’intera stringa che ti ho appena mostrato come parametro GET della tua richiesta HTTP, non dovresti aver problemi.

… A dire il vero ne hai uno… Anzi due!

Il primo, è condividere questo articolo se pensi possa tornare utile a qualcuno!

Il secondo è come fare un JSON URL-encoded vero? 😉

Non ti preoccupare, puoi trovare uno strumento utile a distanza di un click esattamente qui!

Continua a scoprire di più con questi articoli!

Lascia un commento

Questo sito potrebbe fare uso di cookie e siccome l'UE mi obbliga a fartelo presente, eccoti il classico banner dove puoi decidere come gestirli. Accetta Leggi di più