Jak převést JSON na objekt JavaScript

JSON (JavaScript Object Notation) se stal de facto serializačním formátem pro REST API, protože je čitelný, jednoduchý a má malou velikost.

Používá stejnou notaci, jakou se používá k definování objektů JavaScriptu, a převod mezi řetězcem JSON a objekty JavaScriptu je samozřejmě extrémně jednoduchý.

Budeme pracovat s následujícím řetězcem JSON:

const jsonString = '{"author" : "Plato", "name" : "Republic", "releaseYear" : "375BC"}';

Převést řetězec JSON na objekt JavaScript

JSON modul nabízí dvě metody - stringify() , který změní objekt JavaScriptu na řetězec JSON, a parse() , který analyzuje řetězec JSON a vrátí objekt JavaScript.

Je zabudován do samotného jazyka, takže není třeba instalovat ani importovat žádné závislosti:

const book = JSON.parse(jsonString);
console.log('Type: ', typeof book);
console.log('Contents: ', book)

Výsledkem je:

Type: object
Contents: 
{
  author:"Plato",
  name:"Republic",
  releaseYear:"375BC"
}

Můžete být v pokušení eval() strunu do předmětu, ale buďte unavení z praxe:

const book = eval("(" + jsonString + ")")
console.log('Type: ', typeof book);
console.log('Contents: ', book)

Funguje to dobře:

Type: object
Contents: 
{
  author:"Plato",
  name:"Republic",
  releaseYear:"375BC"
}

Tato metoda je však také náchylná ke vkládání kódu. eval() vyhodnotí a spustí jakýkoli libovolný text, který vložíte, za předpokladu, že jej lze spustit. Pokud je naše jsonString bylo změněno na:

const jsonString = 'console.log("Malicious code")';

Pak by jen vyhodnocení mělo za následek:

const book = eval("(" + jsonString + ")")
// Malicious code

Zdarma e-kniha:Git Essentials

Prohlédněte si našeho praktického průvodce učením Git s osvědčenými postupy, průmyslově uznávanými standardy a přiloženým cheat sheetem. Přestaňte používat příkazy Google Git a skutečně se naučte to!

V konečném důsledku je pravda, že JavaScript běží do značné míry na počítači klienta, na kterém mohou v prohlížeči vyhodnocovat a spouštět jakýkoli kód, který chtějí. V posledních letech však došlo k zásadní změně paradigmatu a JavaScript se stále více používá na straně serveru také. I když zabezpečení Code Injection nakonec spadá na stranu serveru, protože na front-endu tomu skutečně nemůžete zabránit – existuje šance, že JavaScript běží i na straně serveru.

Převést řetězec JSON na pole JavaScript

Ačkoli můžete analyzovat JSON do libovolného objektu - běžnou datovou strukturou, do které budete data převádět, jsou pole. Pole JSON jsou obsažena v hranatých závorkách a prvky polí jsou odděleny čárkami:

[element1, element2, element3]

Prvek může být samostatný prvek, jiný objekt JSON nebo jiné pole, které zase může obsahovat kterýkoli z těchto typů. Podívejme se na dvě pole – jednoduché s několika prvky a jedno, které obsahuje několik objektů JSON:

const simpleArrayJson = '["Java", "Python", "JavaScript"]';
const objectArrayJson = '[{"name": "Java", "description": "Java is a class-based, object-oriented programming language."},{"name": "Python", "description": "Python is an interpreted, high-level and general-purpose programming language."}, {"name": "JS", "description": "JS is a programming language that conforms to the ECMAScript specification."}]';

const simpleArray = JSON.parse(simpleArrayJson);
const objectArray = JSON.parse(objectArrayJson);

console.log(simpleArray);
console.log(objectArray);

Výsledkem je:

[
  "Java",
  "Python",
  "JavaScript"
]

[
  {
    name:"Java",
    description:"Java is a class-based, object-oriented programming language."
  },
  {
    name:"Python",
    description:"Python is an interpreted, high-level and general-purpose programming language."
  },
  {
    name:"JS",
    description:"JS is a programming language that conforms to the ECMAScript specification."
  }
]

Závěr

V tomto krátkém tutoriálu jsme se podívali na to, jak převést řetězec JSON na objekt JavaScriptu, a upozornili jsme na špatný postup, který by mohl způsobit zranitelnosti vašeho kódu.