JSON bruges til at overføre data mellem en server og en browser. Her er et grundlæggende eksempel på, hvad der kan være i en .json
streng.
{
"name": "Tania",
"title": "Web Developer",
"website": ""
}
Som du kan se, er det et menneskeligt læsbart dataformat, der traditionelt kan være gemt i en tabel. Nogle virksomheder har muligvis offentlig .json
filer placeret, som du kan få adgang til og udtrække data fra (en API, du kan oprette forbindelse til). Du kan også gemme en .json
fil et sted i dit projekt, som du vil udtrække data fra.
Mål
JSON-data kan tilgås og bruges med mange programmeringssprog. I dette selvstudie lærer vi, hvordan du får adgang til JSON med PHP og JavaScript.
Forudsætninger
- Du skal enten have en lokal server opsat eller en vært, der kører PHP og noget grundlæggende PHP viden.
- Grundlæggende viden om programmeringskoncepter (arrays og variabler) og brug af JavaScript.
Hvad er JSON?
JSON står for J avaS skrift O bject N notation. Det er data gemt i en .json
fil, og består af en række nøgle/værdi-par .
{ "key": "value" }
værdien af enhver JSON-nøgle kan være en streng, boolesk, tal, null, matrix eller objekt. Kommentarer er ikke tilladt i JSON.
Selvom JSON ligner et objekt eller en matrix, er JSON en streng . En serialiseret streng, hvilket betyder, at den senere kan parses og afkodes til datatyper.
Brug af data fra JSON med PHP
For det første, for at bore i, at JSON simpelthen er en streng, skriver vi JSON ind i en PHP-streng og anvender den på en variabel kaldet $data
.
$data = '{
"name": "Aragorn",
"race": "Human"
}';
Så bruger vi json_decode()
funktion til at konvertere JSON-strengen til et PHP-objekt.
$character = json_decode($data);
Nu kan vi få adgang til det som et PHP-objekt.
echo $character->name;
Her er hele filen.
<?php
$data = '{
"name": "Aragorn",
"race": "Human"
}';
$character = json_decode($data);
echo $character->name;
Her er outputtet.
Aragorn
Adgang til et JSON-feed fra en URL
Herfra lægger vi alle JSON-data i deres egen .json
fil. På denne måde kan vi hente indholdet af filen i stedet for at beholde det som en PHP-streng.
Her er hvad data.json vil se ud.
;[
{
name: 'Aragorn',
race: 'Human',
},
{
name: 'Legolas',
race: 'Elf',
},
{
name: 'Gimli',
race: 'Dwarf',
},
]
Og her er, hvordan vi udtrækker disse data i PHP.
$url = 'data.json'; // path to your JSON file
$data = file_get_contents($url); // put the contents of the file into a variable
$characters = json_decode($data); // decode the JSON feed
For at få én indgang skal vi have adgang til det relevante arraynummer. Husk, at tælling begynder med 0 i programmering.
echo $characters[0]->name;
Aragorn
Jeg kan få adgang til alle data i arrayet med en foreach
løkke.
foreach ($characters as $character) {
echo $character->name . '<br>';
}
Aragorn
Legolas
Gimli
Her er den fulde PHP-fil.
<?php
$url = 'data.json'; // path to your JSON file
$data = file_get_contents($url); // put the contents of the file into a variable
$characters = json_decode($data); // decode the JSON feed
echo $characters[0]->name;
foreach ($characters as $character) {
echo $character->name . '<br>';
}
Vi kan vise dataene i en tabel, for eksempel.
<table>
<tbody>
<tr>
<th>Name</th>
<th>Race</th>
</tr>
<?php foreach ($characters as $character) : ?>
<tr>
<td> <?php echo $character->name; ?> </td>
<td> <?php echo $character->race; ?> </td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
Navn | Løb |
---|---|
Aragorn | Menneske |
Gimli | Dværg |
Legolas | Elver |
Brug af associative arrays
Der er en anden måde, vi kan få adgang til dataene i PHP. Hvis du passerer true
som argumentet i json_decode()
, bliver dataene et associativt array i stedet for et objekt. Det betyder, at vi vil bruge notation med firkantet parentes[]
i stedet for den tynde pil->
.
$characters = json_decode($data, true); // decode the JSON feed and make an associative array
I stedet for ->race
, vil vi få adgang til værdien med ['race']
.
echo $characters[0]['race'];
Human
Og her er, hvordan du får adgang til løkken.
foreach ($characters as $character) {
echo $character['race'] . "\n";
}
Human
Elf
Dwarf
Hent data fra indlejrede arrays
Indtil videre har vi kun brugt JSON-feeds med nøgle/værdi-par, men det er almindeligt at støde på nesting. Her er endnu et nørdet eksempel, som vi kan gemme i en ny fil kaldet wizards.json .
[
{
"name": "Harry Potter",
"wand": [
{
"core": "phoenix feather",
"length": "11 inches",
"wood": "holly"
}
]
},
{
"name": "Hermione Granger",
"wand": [
{
"core": "dragon heartstring",
"length": "10 and 3/4 inches",
"wood": "vine"
}
]
}
]
Afkodning af feedet.
$url = 'wizards.json';
$data = file_get_contents($url);
$wizards = json_decode($data, true);
Vi vil være i stand til at få adgang til det indlejrede array ved hjælp af $wizard['key'][0]['key']
i en løkke, eller hvilket nummer der svarer korrekt, hvis du kun vil udskrive én.
foreach ($wizards as $wizard) {
echo $wizard['name'] . '\'s wand is ' .
$wizard['wand'][0]['wood'] . ', ' .
$wizard['wand'][0]['length'] . ', with a ' .
$wizard['wand'][0]['core'] . ' core. <br>' ;
}
Harry Potter's wand is holly, 11 inches, with a phoenix feather core.
Hermione Granger's wand is vine, 10 and 3/4 inches, with a dragon heartstring core.
Konvertering af et PHP-objekt eller en array til JSON
Ligesom du bruger json_decode()
for at gøre JSON til PHP, kan du gøre PHP til JSON med json_encode()
.
$data = [
'name' => 'Aragorn',
'race' => 'Human'
];
echo json_encode($data);
Vi lavede et PHP-array og kodede det. Her er outputtet:
{"name":"Aragorn","race":"Human"}
Brug af data fra JSON med JavaScript
Vi vil oprette en JavaScript-variabel kaldet data
og anvend JSON-strengen.
var data = '[ { "name": "Aragorn", "race": "Human" }, { "name": "Gimli", "race": "Dwarf" } ]'
Nu vil vi bruge JavaScript indbygget i JSON.parse()
funktion til at afkode strengen.
data = JSON.parse(data);
Herfra kan vi få adgang til dataene som et almindeligt JavaScript-objekt.
console.log(data[1].name)
Gimli
Og vi kan sløjfe gennem hver iteration med en for
løkke.
for (var i = 0; i < data.length; i++) {
console.log(data[i].name + ' is a ' + data[i].race + '.')
}
Aragorn is a Human.
Gimli is a Dwarf.
Det var nemt! Nu bliver vi sandsynligvis nødt til at få adgang til JSON fra en URL. Der er et ekstra trin involveret, hvor vi skal lave en anmodning til filen. Lad os bare tage ovenstående JSON-streng og lægge den i data.json .
;[
{
name: 'Aragorn',
race: 'Human',
},
{
name: 'Gimli',
race: 'Dwarf',
},
]
Nu laver vi en XMLHttpRequest()
.
var request = new XMLHttpRequest()
Vi åbner filen (data.json ) via GET (URL) anmodning.
request.open('GET', 'data.json', true)
Herfra vil vi parse og arbejde med alle vores JSON-data inden for onload
funktion.
request.onload = function () {
// begin accessing JSON data here
}
Så indsend endelig anmodningen.
request.send()
Her er den endelige kode.
var request = new XMLHttpRequest()
request.open('GET', 'data.json', true)
request.onload = function () {
// begin accessing JSON data here
var data = JSON.parse(this.response)
for (var i = 0; i < data.length; i++) {
console.log(data[i].name + ' is a ' + data[i].race + '.')
}
}
request.send()
Og outputtet.
Aragorn is a Human.
Gimli is a Dwarf.
Brug af Hent
Nu kan du også bruge Fetch API til at gøre det samme. Læs, hvordan du bruger JavaScript Fetch API til at få JSON-data for en nemmere metode til at få disse data.
// Replace ./data.json with your JSON feed
fetch('./data.json')
.then((response) => {
return response.json()
})
.then((data) => {
// Work with JSON data here
console.log(data)
})
.catch((err) => {
// Do something for an error here
})
Brug af jQuery
Som du kan se, er det ikke så svært at hente et JSON-feed med almindelig JavaScript. Det er dog endnu nemmere med jQuery, ved at bruge getJSON()
fungere. Hvis du ikke ved, hvordan jQuery fungerer, skal du indlæse jQuery JavaScript-biblioteket før nogen af denne tilpassede kode.
$(document).ready(function () {
$.getJSON('data.json', function (data) {
// begin accessing JSON data here
console.log(data[0].name)
})
})
Du kan også se jQuery få adgang til JSON via en AJAX-anmodning, som er lidt mere udførlig.
$(document).ready(function () {
var data
$.ajax({
dataType: 'json',
url: 'data.json',
data: data,
success: function (data) {
// begin accessing JSON data here
console.log(data[0].name)
},
})
})
Begge vil have samme output.
Aragorn
Konklusion
Forhåbentlig har denne artikel lært dig lidt om, hvad JSON er og gør, og hvordan du får adgang til JSON-data med PHP, JavaScript eller jQuery.