ÐбознаÑение обÑекÑов JavaScript (JSON - JavaScript Object Notation) - ÑÑандаÑÑнÑй ÑекÑÑовÑй ÑоÑÐ¼Ð°Ñ Ð´Ð»Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑÑÑкÑÑÑиÑованнÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð½Ð° оÑнове ÑинÑакÑиÑа обÑекÑа JavaScript. Ðн обÑÑно иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¿ÐµÑедаÑи даннÑÑ Ð² веб-пÑиложениÑÑ (напÑимеÑ, оÑпÑавка некоÑоÑÑÑ Ð´Ð°Ð½Ð½ÑÑ Ñ ÑеÑвеÑа клиенÑÑ,Ñаким обÑазом ÑÑÐ¾Ð±Ñ ÑÑо могло оÑобÑажаÑÑÑÑ Ð½Ð° веб-ÑÑÑаниÑе или наобоÑоÑ). ÐÑ Ð±ÑдеÑе ÑÑалкиваÑÑÑÑ Ñ ÑÑим доволÑно ÑаÑÑо, поÑÑÐ¾Ð¼Ñ Ð² ÑÑой ÑÑаÑÑе Ð¼Ñ Ð´Ð°Ñм вам вÑе, ÑÑо вам нÑжно Ð´Ð»Ñ ÑабоÑÑ Ñ JSON иÑполÑзÑÑ JavaScript, вклÑÑÐ°Ñ Ð¿Ð°ÑÑинг JSON, ÑÑÐ¾Ð±Ñ Ð²Ñ Ð¼Ð¾Ð³Ð»Ð¸ полÑÑиÑÑ Ð´Ð¾ÑÑÑп к даннÑм внÑÑÑи него пÑи Ñоздании JSON.
ÐÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñе знаниÑ: ÐÐ°Ð·Ð¾Ð²Ð°Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑÐ½Ð°Ñ Ð³ÑамоÑноÑÑÑ, базовÑе Ð·Ð½Ð°Ð½Ð¸Ñ HTML и CSS, знакомÑÑво Ñ Ð¾Ñновами JavaScript (Ñм. First steps и Building blocks) и оÑновами OOJS (see Introduction to objects). ЦелÑ: ÐонÑÑÑ, как ÑабоÑаÑÑ Ñ Ð´Ð°Ð½Ð½Ñми, Ñ ÑанÑÑимиÑÑ Ð² JSON, и ÑоздаваÑÑ Ñвои ÑобÑÑвеннÑе обÑекÑÑ JSON. ÐеÑ, дейÑÑвиÑелÑно, ÑÑо Ñакое JSON?JSON - ÑекÑÑовÑй ÑоÑÐ¼Ð°Ñ Ð´Ð°Ð½Ð½ÑÑ , ÑледÑÑÑий за ÑинÑакÑиÑом обÑекÑа JavaScript, коÑоÑÑй бÑл попÑлÑÑизиÑован ÐÑглаÑом ÐÑокÑоÑдом. ÐеÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо он оÑÐµÐ½Ñ Ð¿Ð¾Ñ Ð¾Ð¶ на бÑквеннÑй ÑинÑакÑÐ¸Ñ Ð¾Ð±ÑекÑа JavaScript, его можно иÑполÑзоваÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо Ð¾Ñ JavaScript, и многие ÑÑÐµÐ´Ñ Ð¿ÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð¼ÐµÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑиÑаÑÑ (анализиÑоваÑÑ) и генеÑиÑоваÑÑ JSON.
JSON ÑÑÑеÑÑвÑÐµÑ ÐºÐ°Ðº ÑÑÑока,ÑÑо Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ пÑи пеÑедаÑе даннÑÑ Ð¿Ð¾ ÑеÑи. Ðн должен бÑÑÑ Ð¿ÑеобÑазован в ÑобÑÑвеннÑй обÑÐµÐºÑ JavaScript, еÑли Ð²Ñ Ñ Ð¾ÑиÑе полÑÑиÑÑ Ð´Ð¾ÑÑÑп к даннÑм. ÐÑо не болÑÑÐ°Ñ Ð¿Ñоблема. JavaScript пÑедоÑÑавлÑÐµÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑй обÑÐµÐºÑ JSON, коÑоÑÑй Ð¸Ð¼ÐµÐµÑ Ð¼ÐµÑÐ¾Ð´Ñ Ð´Ð»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð½Ð¸Ð¼Ð¸.
ÐÑимеÑание: ÐÑеобÑазование ÑÑÑоки в Ñодной обÑÐµÐºÑ Ð½Ð°Ð·ÑваеÑÑÑ Ð´ÐµÑеÑиализаÑией (пÑеобÑазование из поÑледоваÑелÑной ÑоÑÐ¼Ñ Ð² паÑаллелÑнÑÑ*)*, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº пÑеобÑазовании Ñодного обÑекÑа в ÑÑÑокÑ, Ñаким обÑазом ,ÑÑÐ¾Ð±Ñ Ð¾Ð½ мог бÑÑÑ Ð¿ÐµÑедан ÑеÑез ÑеÑÑ, назÑваеÑÑÑ ÑеÑиализаÑией(пÑеобÑазование в поÑледоваÑелÑнÑÑ ÑоÑмÑ).
ÐбÑÐµÐºÑ JSON Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑоÑ
ÑанÑн в ÑобÑÑвенном Ñайле, коÑоÑÑй в оÑновном пÑедÑÑавлÑÐµÑ Ñобой ÑекÑÑовÑй Ñайл Ñ ÑаÑÑиÑением .json
и MIME type application/json
.
Ðак опиÑано вÑÑе, JSON пÑедÑÑавлÑÐµÑ Ñобой ÑÑÑокÑ, ÑоÑÐ¼Ð°Ñ ÐºÐ¾ÑоÑой оÑÐµÐ½Ñ Ð¿Ð¾Ñ Ð¾Ð¶ на бÑквеннÑй ÑоÑÐ¼Ð°Ñ Ð¾Ð±ÑекÑа JavaScript. ÐÑ Ð¼Ð¾Ð¶ÐµÑе вклÑÑаÑÑ Ð¾Ð´Ð½Ð¸ и Ñе же базовÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ Ð²Ð½ÑÑÑи JSON, Ñак же как и в ÑÑандаÑÑном обÑекÑе JavaScript - ÑÑÑоки, ÑиÑла, маÑÑивÑ, бÑÐ»ÐµÐ²Ñ Ð¸ дÑÑгие обÑекÑнÑе лиÑеÑалÑ. ÐÑо позволÑÐµÑ Ð¿Ð¾ÑÑÑоиÑÑ Ð¸ÐµÑаÑÑ Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ , к пÑимеÑÑ, Ñак:
{
"squadName": "Super hero squad",
"homeTown": "Metro City",
"formed": 2016,
"secretBase": "Super tower",
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": ["Radiation resistance", "Turning tiny", "Radiation blast"]
},
{
"name": "Madame Uppercut",
"age": 39,
"secretIdentity": "Jane Wilson",
"powers": [
"Million tonne punch",
"Damage resistance",
"Superhuman reflexes"
]
},
{
"name": "Eternal Flame",
"age": 1000000,
"secretIdentity": "Unknown",
"powers": [
"Immortality",
"Heat Immunity",
"Inferno",
"Teleportation",
"Interdimensional travel"
]
}
]
}
ÐÑли Ð±Ñ Ð¼Ñ Ð·Ð°Ð³ÑÑзили ÑÑÐ¾Ñ Ð¾Ð±ÑÐµÐºÑ Ð² пÑогÑÐ°Ð¼Ð¼Ñ JavaScript, Ñоздали пеÑеменнÑÑ Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼ superHeroes
, Ð¼Ñ Ð¼Ð¾Ð³Ð»Ð¸ Ð±Ñ Ð·Ð°Ñем полÑÑиÑÑ Ð´Ð¾ÑÑÑп к даннÑм внÑÑÑи неÑ, иÑполÑзÑÑ Ñе же ÑамÑе ÑоÑеÑнÑÑ Ð¸ ÑкобоÑнÑÑ Ð½Ð¾ÑаÑии, коÑоÑÑе Ð¼Ñ ÑаÑÑмоÑÑели в ÑÑаÑÑе JavaScript object basics. ÐапÑимеÑ:
superHeroes.homeTown;
superHeroes["active"];
ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾ÑÑÑп к поÑледÑÑÑим даннÑм по иеÑаÑÑ Ð¸Ð¸, вам пÑоÑÑо нÑжно обÑединиÑÑ ÑÑебÑемÑе имена ÑвойÑÑв и индекÑÑ Ð¼Ð°ÑÑивов. ÐапÑимеÑ, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾ÑÑÑп к ÑÑеÑÑей ÑвеÑÑ ÑпоÑобноÑÑи вÑоÑого геÑоÑ, Ñказанного в ÑпиÑке ÑÑаÑÑников, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑделаÑÑ ÑледÑÑÑее:
superHeroes["members"][1]["powers"][2];
superHeroes
.members
, поÑÑÐ¾Ð¼Ñ Ð¼Ñ Ð¸ÑполÑзÑем ['members']
.members
ÑодеÑÐ¶Ð°Ñ Ð¼Ð°ÑÑив, заполненнÑй обÑекÑами. ÐÑ Ñ
оÑим полÑÑиÑÑ Ð´Ð¾ÑÑÑп ко вÑоÑÐ¾Ð¼Ñ Ð¾Ð±ÑекÑÑ Ð²Ð½ÑÑÑи маÑÑива, поÑÑÐ¾Ð¼Ñ Ð¼Ñ Ð¸ÑполÑзÑем [1]
.powers
, поÑÑÐ¾Ð¼Ñ Ð¼Ñ Ð¸ÑполÑзÑем ['powers']
.powers
наÑ
одиÑÑÑ Ð¼Ð°ÑÑив, ÑодеÑжаÑий ÑвеÑÑ
ÑпоÑобноÑÑи вÑбÑанного геÑоÑ. Ðам нÑжен ÑÑеÑий, поÑÑÐ¾Ð¼Ñ Ð¼Ñ Ð¸ÑполÑзÑем [2]
.ÐÑимеÑание: ÐÑ Ñделали JSON, видимÑй вÑÑе, доÑÑÑпнÑм внÑÑÑи пеÑеменной в наÑем пÑимеÑе JSONTest.html (Ñм. иÑÑ Ð¾Ð´Ð½Ñй код). ÐопÑобÑйÑе загÑÑзиÑÑ ÑÑо, а заÑем полÑÑиÑÑ Ð´Ð¾ÑÑÑп к даннÑм внÑÑÑи пеÑеменной ÑеÑез конÑÐ¾Ð»Ñ JavaScript ваÑего бÑаÑзеÑа.
ÐаÑÑÐ¸Ð²Ñ ÐºÐ°Ðº JSONÐÑÑе Ð¼Ñ Ñпоминали ,ÑÑо JSON ÑекÑÑ Ð²ÑглÑÐ´Ð¸Ñ Ð¿ÑакÑиÑеÑки Ñак же как и JavaScript обÑекÑ,и ÑÑо поÑÑи пÑавилÑно.ÐÑиÑина,по коÑоÑой Ð¼Ñ Ð³Ð¾Ð²Ð¾Ñим поÑÑи пÑавилÑно заклÑÑаеÑÑÑ Ð² Ñом ,ÑÑо маÑÑив Ñакже валиден JSON напÑимеÑ:
[
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": ["Radiation resistance", "Turning tiny", "Radiation blast"]
},
{
"name": "Madame Uppercut",
"age": 39,
"secretIdentity": "Jane Wilson",
"powers": [
"Million tonne punch",
"Damage resistance",
"Superhuman reflexes"
]
}
]
ÐÑÑеÑказанное вполне ÑпÑаведливо Ð´Ð»Ñ JSON. Ðам пÑоÑÑо нÑжно полÑÑиÑÑ Ð´Ð¾ÑÑÑп к ÑлеменÑам маÑÑива (в его анализиÑÑемой веÑÑии), наÑÐ¸Ð½Ð°Ñ Ñ Ð¸Ð½Ð´ÐµÐºÑа маÑÑива, напÑÐ¸Ð¼ÐµÑ [0]["powers"][0]
.
ÐÑак, давайÑе ÑаÑÑмоÑÑим пÑимеÑ, ÑÑÐ¾Ð±Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑ Ñо, как Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе даннÑе JSON на веб-ÑайÑе.
ÐаÑало ÑабоÑÑÐÐ»Ñ Ð½Ð°Ñала ÑоздайÑе локалÑнÑе копии наÑÐ¸Ñ Ñайлов heroes.html и style.css. ÐоÑледний ÑодеÑÐ¶Ð¸Ñ Ð¿ÑоÑÑой CSS Ð´Ð»Ñ ÑÑилизаÑии наÑей ÑÑÑаниÑÑ, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº пеÑвÑй ÑодеÑÐ¶Ð¸Ñ Ð¾ÑÐµÐ½Ñ Ð¿ÑоÑÑой HTML-код ÑÑÑноÑÑи:
<header></header>
<section></section>
ÐлÑÑ <script>
, ÑÑÐ¾Ð±Ñ ÑодеÑжаÑÑ ÐºÐ¾Ð´ JavaScript, коÑоÑÑй Ð¼Ñ Ð±Ñдем пиÑаÑÑ Ð² ÑÑом ÑпÑажнении. Ðа даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¾Ð½ ÑодеÑÐ¶Ð¸Ñ ÑолÑко две ÑÑÑоки, коÑоÑÑе заÑ
ваÑÑваÑÑ ÑÑÑлки на ÑлеменÑÑ <header>
и <section>
и ÑоÑ
ÑанÑÑÑ Ð¸Ñ
в пеÑеменнÑÑ
:
var header = document.querySelector("header");
var section = document.querySelector("section");
ÐÑ Ð¿ÑедоÑÑавили даннÑе JSON на наÑем GitHub, на https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json.
ÐÑ ÑобиÑаемÑÑ Ð·Ð°Ð³ÑÑзиÑÑ ÐµÐ³Ð¾ на наÑÑ ÑÑÑаниÑÑ Ð¸ иÑполÑзоваÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе изÑÑнÑе манипÑлÑÑии DOM, ÑÑÐ¾Ð±Ñ Ð¾ÑобÑазиÑÑ Ð¸Ñ , напÑимеÑ:
ÐолÑÑение JSONЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ JSON, Ð¼Ñ Ð±Ñдем иÑполÑзоваÑÑ API, назÑваемÑй XMLHttpRequest
(ÑаÑÑо назÑваемÑй XHR). ÐÑо оÑÐµÐ½Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñй обÑÐµÐºÑ JavaScript, коÑоÑÑй позволÑÐµÑ Ð½Ð°Ð¼ делаÑÑ ÑеÑевÑе запÑоÑÑ Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑÐµÐ½Ð¸Ñ ÑеÑÑÑÑов Ñ ÑеÑвеÑа ÑеÑез JavaScript (напÑимеÑ, изобÑажениÑ, ÑекÑÑ, JSON, даже ÑÑагменÑÑ HTML), ÑÑо ознаÑаеÑ, ÑÑо Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ обновлÑÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑие ÑÐ°Ð·Ð´ÐµÐ»Ñ ÐºÐ¾Ð½ÑенÑа без необÑ
одимоÑÑи пеÑезагÑÑзки вÑей ÑÑÑаниÑÑ. ÐÑо пÑивело к более оÑзÑвÑивÑм веб-ÑÑÑаниÑам и звÑÑÐ¸Ñ Ð·Ð°Ñ
ваÑÑваÑÑе, но, к ÑожалениÑ, вÑÑ
Ð¾Ð´Ð¸Ñ Ð·Ð° Ñамки ÑÑой ÑÑаÑÑи, ÑÑÐ¾Ð±Ñ Ð¸Ð·ÑÑиÑÑ ÑÑо гоÑаздо более подÑобно.
ÐаÑнÑм Ñ Ñого, ÑÑо Ð¼Ñ ÑобиÑаемÑÑ ÑÐ¾Ñ ÑаниÑÑ URL-адÑÐµÑ JSON, коÑоÑÑй Ð¼Ñ Ñ Ð¾Ñим полÑÑиÑÑ Ð² пеÑеменной. ÐобавÑÑе нижеÑледÑÑÑий код JavaScript:
var requestURL =
"https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json";
ЧÑÐ¾Ð±Ñ ÑоздаÑÑ Ð·Ð°Ð¿ÑоÑ, нам нÑжно ÑоздаÑÑ Ð½Ð¾Ð²Ñй ÑкземплÑÑ Ð¾Ð±ÑекÑа запÑоÑа из конÑÑÑÑкÑоÑа XMLHttpRequest
, иÑполÑзÑÑ ÐºÐ»ÑÑевое Ñлово new
. ÐобавÑÑе ÑледÑÑÑÑÑ Ð½Ð¸Ð¶Ðµ ÑÐ²Ð¾Ñ Ð¿Ð¾ÑледнÑÑ ÑÑÑокÑ:
var request = new XMLHttpRequest();
ТепеÑÑ Ð½Ð°Ð¼ нÑжно оÑкÑÑÑÑ Ð½Ð¾Ð²Ñй запÑоÑ, иÑполÑзÑÑ Ð¼ÐµÑод open()
. ÐобавÑÑе ÑледÑÑÑÑÑ ÑÑÑокÑ:
request.open("GET", requestURL);
ÐÑо Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð½Ðµ менее двÑÑ Ð¿Ð°ÑамеÑÑов - еÑÑÑ Ð´ÑÑгие доÑÑÑпнÑе паÑамеÑÑÑ. Ðам нÑжно ÑолÑко два обÑзаÑелÑнÑÑ Ð´Ð»Ñ ÑÑого пÑоÑÑого пÑимеÑа:
GET
ÑамÑй подÑ
одÑÑий, Ñак как Ð¼Ñ Ð¿ÑоÑÑо извлекаем некоÑоÑÑе пÑоÑÑÑе даннÑе.ÐаÑем добавÑÑе ÑледÑÑÑие две ÑÑÑоки: здеÑÑ Ð¼Ñ ÑÑÑанавливаем responseType
в JSON, Ñак ÑÑо XHR знаеÑ, ÑÑо ÑеÑÐ²ÐµÑ Ð±ÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ JSON и, ÑÑо ÑÑо должно бÑÑÑ Ð¿ÑеобÑазовано за кÑлиÑами в обÑÐµÐºÑ JavaScript. ÐаÑем Ð¼Ñ Ð¾ÑпÑавлÑем запÑÐ¾Ñ Ð¼ÐµÑодом send()
:
request.responseType = "json";
request.send();
ÐоÑледнÑÑ ÑаÑÑÑ ÑÑого Ñаздела пÑÐµÐ´Ð¿Ð¾Ð»Ð°Ð³Ð°ÐµÑ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ðµ оÑвеÑа на возвÑÐ°Ñ Ñ ÑеÑвеÑа, а заÑем ÑабоÑÑ Ñ Ð½Ð¸Ð¼. ÐобавÑÑе ÑледÑÑÑий код ниже ваÑего пÑедÑдÑÑего кода:
request.onload = function () {
var superHeroes = request.response;
populateHeader(superHeroes);
showHeroes(superHeroes);
};
ÐдеÑÑ Ð¼Ñ ÑоÑ
ÑанÑем оÑÐ²ÐµÑ Ð½Ð° Ð½Ð°Ñ Ð·Ð°Ð¿ÑÐ¾Ñ (доÑÑÑпнÑй в ÑвойÑÑве response
) в пеÑеменной superHeroes
; ÑÑа пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÑепеÑÑ Ð±ÑÐ´ÐµÑ ÑодеÑжаÑÑ Ð¾Ð±ÑÐµÐºÑ JavaScript, оÑнованнÑй на JSON! ÐаÑем Ð¼Ñ Ð¿ÐµÑедаÑм ÑÑÐ¾Ñ Ð¾Ð±ÑÐµÐºÑ Ð´Ð²Ñм вÑзовам ÑÑнкÑий - пеÑвÑй из ниÑ
Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ <header>
пÑавилÑнÑми даннÑми, а вÑоÑой ÑоздаÑÑ Ð¸Ð½ÑоÑмаÑионнÑÑ ÐºÐ°ÑÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ геÑÐ¾Ñ Ð² команде и вÑÑавлÑÐµÑ ÐµÑ Ð² <section>
.
ÐÑ ÑвеÑнÑли код в обÑабоÑÑик ÑобÑÑий, коÑоÑÑй запÑÑкаеÑÑÑ, когда ÑобÑÑие загÑÑзки запÑÑкаеÑÑÑ Ð² обÑекÑе запÑоÑа (Ñм. onload
) - ÑÑо ÑвÑзано Ñ Ñем, ÑÑо ÑобÑÑие загÑÑзки запÑÑкаеÑÑÑ, когда оÑÐ²ÐµÑ ÑÑпеÑно возвÑаÑаеÑÑÑ; поÑÑÑÐ¿Ð°Ñ Ñаким обÑазом,ÑÑо гаÑанÑÐ¸Ñ Ñого, ÑÑо request.response
опÑеделÑнно бÑÐ´ÐµÑ Ð´Ð¾ÑÑÑпен, когда Ð¼Ñ Ð½Ð°ÑнÑм ÑабоÑÑ Ñ Ð½Ð¸Ð¼.
Ðаполнение заголовка
ТепеÑÑ Ð¼Ñ Ð¸Ð·Ð²Ð»ÐµÐºÐ»Ð¸ даннÑе JSON и пÑевÑаÑили его в обÑÐµÐºÑ JavaScript, давайÑе воÑполÑзÑемÑÑ Ð¸Ð¼, напиÑав две ÑÑнкÑии, на коÑоÑÑе Ð¼Ñ ÑÑÑлалиÑÑ Ð²ÑÑе. ÐÑежде вÑего, добавÑÑе ÑледÑÑÑее опÑеделение ÑÑнкÑии ниже пÑедÑдÑÑего кода:
function populateHeader(jsonObj) {
var header = document.querySelector("header");
var myH1 = document.createElement("h1");
myH1.textContent = jsonObj["squadName"];
header.appendChild(myH1);
var myPara = document.createElement("p");
myPara.textContent =
"Hometown: " + jsonObj["homeTown"] + " // Formed: " + jsonObj["formed"];
header.appendChild(myPara);
}
ÐÑ Ð½Ð°Ð·Ð²Ð°Ð»Ð¸ паÑамеÑÑ jsonObj
, ÑÑÐ¾Ð±Ñ Ð½Ð°Ð¿Ð¾Ð¼Ð½Ð¸ÑÑ Ñебе, ÑÑо ÑÑÐ¾Ñ Ð¾Ð±ÑÐµÐºÑ JavaScript возник из JSON. ÐдеÑÑ Ð¼Ñ ÑнаÑала ÑоздаÑм ÑÐ»ÐµÐ¼ÐµÐ½Ñ <h1>
Ñ createElement()
, ÑÑÑанавливаем его textContent
ÑавнÑм ÑвойÑÑÐ²Ñ squadName
обÑекÑа, а заÑем добавлÑем его в заголовок Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ appendChild()
. ÐаÑем Ð¼Ñ Ð²ÑполнÑем оÑÐµÐ½Ñ Ð¿Ð¾Ñ
ожÑÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ñ Ð°Ð±Ð·Ð°Ñем: ÑоздаÑм его, ÑÑÑанавливаем его ÑекÑÑовое ÑодеÑжимое и добавлÑем его в заголовок. ÐдинÑÑвенное ÑазлиÑие заклÑÑаеÑÑÑ Ð² Ñом, ÑÑо его ÑекÑÑ Ð·Ð°Ð´Ð°Ð½, как конкаÑениÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ ÑÑÑока, ÑодеÑжаÑÐ°Ñ ÐºÐ°Ðº homeTown
, Ñак и formed
ÑвойÑÑва обÑекÑа.
ÐаÑем добавÑÑе ÑледÑÑÑÑÑ ÑÑнкÑÐ¸Ñ Ð²Ð½Ð¸Ð·Ñ ÐºÐ¾Ð´Ð°, коÑоÑÐ°Ñ ÑоздаÑÑ Ð¸ оÑобÑÐ°Ð¶Ð°ÐµÑ ÐºÐ°ÑÑÑ ÑÑпеÑгеÑоев:
function showHeroes(jsonObj) {
var section = document.querySelector("section");
var heroes = jsonObj["members"];
for (var i = 0; i < heroes.length; i++) {
var myArticle = document.createElement("article");
var myH2 = document.createElement("h2");
var myPara1 = document.createElement("p");
var myPara2 = document.createElement("p");
var myPara3 = document.createElement("p");
var myList = document.createElement("ul");
myH2.textContent = heroes[i].name;
myPara1.textContent = "Secret identity: " + heroes[i].secretIdentity;
myPara2.textContent = "Age: " + heroes[i].age;
myPara3.textContent = "Superpowers:";
var superPowers = heroes[i].powers;
for (var j = 0; j < superPowers.length; j++) {
var listItem = document.createElement("li");
listItem.textContent = superPowers[j];
myList.appendChild(listItem);
}
myArticle.appendChild(myH2);
myArticle.appendChild(myPara1);
myArticle.appendChild(myPara2);
myArticle.appendChild(myPara3);
myArticle.appendChild(myList);
section.appendChild(myArticle);
}
}
ÐÐ»Ñ Ð½Ð°Ñала ÑоÑ
Ñаним ÑвойÑÑво members
обÑекÑа JavaScript в новой пеÑеменной. ÐÑÐ¾Ñ Ð¼Ð°ÑÑив ÑодеÑÐ¶Ð¸Ñ Ð½ÐµÑколÑко обÑекÑов, коÑоÑÑе ÑодеÑÐ¶Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ геÑоÑ.
ÐаÑем Ð¼Ñ Ð¸ÑполÑзÑем for loop Ð´Ð»Ñ ÑиклиÑеÑкого пÑÐ¾Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ обÑекÑа в маÑÑиве. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ из Ð½Ð¸Ñ Ð¼Ñ:
<article>
, <h2>
, ÑÑи <p>
и <ul>
.<h2>
, ÑÑÐ¾Ð±Ñ ÑодеÑжаÑÑ name
ÑекÑÑего геÑоÑ.secretIdentity
, age
и ÑÑÑокой, в коÑоÑой говоÑиÑÑÑ: «СÑпеÑÑпоÑобноÑÑи:», ÑÑÐ¾Ð±Ñ Ð²Ð²ÐµÑÑи инÑоÑмаÑÐ¸Ñ Ð² ÑпиÑок.powers
в дÑÑгой новой пеÑеменной под названием superPowers
- где ÑодеÑжиÑÑÑ Ð¼Ð°ÑÑив, в коÑоÑом пеÑеÑиÑÐ»ÐµÐ½Ñ ÑвеÑÑ
ÑпоÑобноÑÑи ÑекÑÑего геÑоÑ.for
, ÑÑÐ¾Ð±Ñ Ð¿ÑокÑÑÑиÑÑ ÑвеÑÑ
ÑпоÑобноÑÑи ÑекÑÑего геÑÐ¾Ñ , Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ из ниÑ
Ð¼Ñ ÑоздаÑм ÑÐ»ÐµÐ¼ÐµÐ½Ñ <li>
, помеÑаем в него ÑвеÑÑ
ÑпоÑобноÑÑи, а заÑем помеÑаем listItem
внÑÑÑи ÑлеменÑа <ul>
(myList
) Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ appendChild()
.<h2>
, <p>
и <ul>
внÑÑÑи <article>
(myArticle
), а заÑем добавлÑем <article>
в <section>
. Ðажное знаÑение Ð¸Ð¼ÐµÐµÑ Ð¿Ð¾ÑÑдок, в коÑоÑом добавлÑÑÑÑÑ ÑлеменÑÑ, Ñак как ÑÑо поÑÑдок, коÑоÑÑй они бÑдÑÑ Ð¾ÑобÑажаÑÑ Ð²Ð½ÑÑÑи HTML.ÐÑимеÑание: ÐÑли вам не ÑдаÑÑÑÑ Ð·Ð°ÑÑавиÑÑ ÑÑÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ ÑабоÑаÑÑ, попÑобÑйÑе обÑаÑиÑÑÑÑ Ðº наÑÐµÐ¼Ñ Ð¸ÑÑ Ð¾Ð´Ð½Ð¾Ð¼Ñ ÐºÐ¾Ð´Ñ heroes-finished.html (Ñм. Ñакже он ÑабоÑÐ°ÐµÑ Ð² Ñежиме live).
ÐÑимеÑание: ÐÑли Ñ Ð²Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ»Ð¸ пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¿Ð¾Ñле ноÑаÑии ÑоÑек / Ñкобок, коÑоÑÑе Ð¼Ñ Ð¸ÑполÑзÑем Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к обÑекÑÑ JavaScript, в ÑÑом Ð¿Ð¾Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑкÑÑÑие Ñайла superheroes.json на дÑÑгой вкладке или в ÑекÑÑовом ÑедакÑоÑе ,и обÑаÑаÑÑÑÑ Ðº Ð½ÐµÐ¼Ñ ÐºÐ°Ð¶Ð´Ñй Ñаз, когда вам нÑжен JavaScript. ÐÑ Ñакже можеÑе обÑаÑиÑÑÑÑ Ðº наÑей ÑÑаÑÑе JavaScript objectbasics ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ноÑаÑии ÑоÑек и Ñкобок.
ÐÑеобÑазование Ð¼ÐµÐ¶Ð´Ñ Ð¾Ð±ÑекÑами и ÑекÑÑомÐÑÑепÑиведÑннÑй пÑÐ¸Ð¼ÐµÑ Ð±Ñл пÑоÑÑ Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑÑпа к обÑекÑÑ JavaScript, поÑÐ¾Ð¼Ñ ÑÑо Ð¼Ñ Ð·Ð°Ð´Ð°Ð»Ð¸ XHR-запÑÐ¾Ñ Ð´Ð»Ñ Ð¿ÑÑмого пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾ÑвеÑа JSON в обÑÐµÐºÑ JavaScript, иÑполÑзÑÑ:
request.responseType = "json";
Ðо иногда нам не Ñак везÑÑ - иногда Ð¼Ñ Ð¿Ð¾Ð»ÑÑаем ÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ JSON и нам нÑжно пÑеобÑазоваÑÑ ÐµÑ Ð² обÑÐµÐºÑ ÑамоÑÑоÑÑелÑно. Ркогда Ð¼Ñ Ñ Ð¾Ñим оÑпÑавиÑÑ Ð¾Ð±ÑÐµÐºÑ JavaScript по ÑеÑи, нам нÑжно пÑеобÑазоваÑÑ ÐµÐ³Ð¾ в JSON (ÑÑÑокÑ) пеÑед оÑпÑавкой. Ð ÑÑаÑÑÑÑ, ÑÑи две пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð½Ð°ÑÑолÑко ÑаÑпÑоÑÑÑÐ°Ð½ÐµÐ½Ñ Ð² веб-ÑазÑабоÑке, ÑÑо вÑÑÑоеннÑй обÑÐµÐºÑ JSON доÑÑÑпен в бÑаÑзеÑÐ°Ñ , коÑоÑÑе ÑодеÑÐ¶Ð°Ñ ÑледÑÑÑие два меÑода:
parse()
: пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑÑÐ¾ÐºÑ JSON в каÑеÑÑве паÑамеÑÑа и возвÑаÑÐ°ÐµÑ ÑооÑвеÑÑÑвÑÑÑий обÑÐµÐºÑ JavaScript.stringify()
: пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¾Ð±ÑекÑ, как паÑамеÑÑ Ð¸ возвÑаÑÐ°ÐµÑ ÑквиваленÑнÑÑ ÑÑÑоковÑÑ JSON ÑÑÑокÑ.ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑвидеÑÑ Ð¿ÐµÑвÑй меÑод в дейÑÑвии в наÑем пÑимеÑе heroes-finished-json-parse.html (Ñм. иÑÑ
однÑй код) - ÑÑо Ñо же Ñамое, ÑÑо и в пÑимеÑе, коÑоÑÑй Ð¼Ñ Ñоздали Ñанее, за иÑклÑÑением Ñого, ÑÑо Ð¼Ñ ÑÑÑановили XHR Ð´Ð»Ñ Ð²Ð¾Ð·Ð²ÑаÑа ÑÑÑого JSON ÑекÑÑа, заÑем иÑполÑзÑеÑÑÑ parse()
, ÑÑÐ¾Ð±Ñ Ð¿ÑеобÑазоваÑÑ ÐµÐ³Ð¾ в ÑакÑиÑеÑкий обÑÐµÐºÑ JavaScript. ÐлÑÑевой ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ ÐºÐ¾Ð´Ð° наÑ
одиÑÑÑ Ð·Ð´ÐµÑÑ:
request.open("GET", requestURL);
request.responseType = "text"; // now we're getting a string!
request.send();
request.onload = function () {
var superHeroesText = request.response; // get the string from the response
var superHeroes = JSON.parse(superHeroesText); // convert it to an object
populateHeader(superHeroes);
showHeroes(superHeroes);
};
Ðак Ð²Ñ Ð¼Ð¾Ð³Ð»Ð¸ догадаÑÑÑÑ, stringify()
ÑабоÑÐ°ÐµÑ Ð¾Ð±ÑаÑнÑм обÑазом. ÐопÑобÑйÑе ввеÑÑи ÑледÑÑÑие ÑÑÑоки в конÑÐ¾Ð»Ñ JavaScript бÑаÑзеÑа один за дÑÑгим, ÑÑÐ¾Ð±Ñ ÑвидеÑÑ ÐµÐ³Ð¾ в дейÑÑвии:
var myJSON = { name: "Chris", age: "38" };
myJSON;
var myString = JSON.stringify(myJSON);
myString;
ÐдеÑÑ Ð¼Ñ ÑоздаÑм обÑÐµÐºÑ JavaScript, заÑем пÑовеÑÑем, ÑÑо он ÑодеÑжиÑ, а заÑем пÑеобÑазÑем его в ÑÑÑÐ¾ÐºÑ JSON, иÑполÑзÑÑ stringify()
, ÑоÑ
ÑанÑÑ Ð²Ð¾Ð·Ð²ÑаÑаемое знаÑение в новой пеÑеменной, а заÑем Ñнова пÑовеÑÑем его.
Ð ÑÑой ÑÑаÑÑе Ð¼Ñ Ð¿ÑедоÑÑавили вам пÑоÑÑое ÑÑководÑÑво по иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ JSON в ваÑÐ¸Ñ Ð¿ÑогÑÐ°Ð¼Ð¼Ð°Ñ , в Ñом ÑиÑле о Ñом, как ÑоздаваÑÑ Ð¸ анализиÑоваÑÑ JSON, и как полÑÑиÑÑ Ð´Ð¾ÑÑÑп к даннÑм, заблокиÑованнÑм внÑÑÑи него. Ð ÑледÑÑÑей ÑÑаÑÑе Ð¼Ñ ÑаÑÑмоÑÑим обÑекÑно-оÑиенÑиÑованнÑй JavaScript.
СмоÑÑиÑе ÑакжеRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4