NodeJS. Kuidas saata andmeid JSON-vormingus. Saatke JSON-andmed Javascriptist PHP-sse

JSON (JavaScript Object Notation) on vorming andmete vahetamiseks teksti kujul. Keeruliste andmestruktuuride serialiseeritud kujul ülekandmise võimaldamine. See andmeedastusvorming on muutunud nii populaarseks, et juba PHP tuumas, alates versioonist 5.2.0, lisandusid selles vormingus andmete töötlemise funktsioonid. See tähendab, et ühendust pole vaja täiendavad laiendused. JSON-i andmevorming on inimesele hästi loetav. Pealegi seda tüüpi andmevahetust kasutatakse laialdaselt erinevate API-teenuste vahel. Ja teabevahetuse algoritmide õige väljatöötamise korral võite saada väga suure kiiruse tõusu kui näiteks XML-vormingus andmetega töötamisel.

Andmete saatmine

Saada andmed aadressile JSON-vormingus saab teha kahel viisil: moodustada GET või POSTI taotlus kodeeritud andmetega, mis asuvad GET-is või POST muutuja või asetage andmed dokumendi kehasse. Praktikas kasutatakse tavaliselt teist võimalust.

Andmete saatmiseks on vaja järgmisi funktsioone:

  • string json_encode (segaväärtus [, int suvandid = 0])

    Väärtuse parameeter määrab andmed, mida tuleb kodeerida. Toetatakse mis tahes tüüpi, välja arvatud tüüp ressurss. Suvandite parameeter sisaldab võimalike pakutavate väärtuste bitimaski (vt tabelit koos JSON-i konstantidega).

  • ressurss stream_context_create (])

    See funktsioon on loodud lõime konteksti loomiseks ja tagastamiseks suvandite parameetris määratud suvanditega. Valikuliste valikute parameetri tüüp peab olema assotsiatiivne massiiv. Esialgu on see tühi. Teine valikuline parameeter parameeter peab samuti olema assotsiatiivne massiiv vormingus $data['nimi'] = väärtus.

  • string file_get_contents (stringi failinimi [, bool use_include_path [, ressursi kontekst [, int offset [, int maxlen ]]]])

    Selle funktsiooni kasutamine võimaldab teil saada faili sisu stringina. Failinime parameeter on loetava faili nimi. Parameetris use_include_path alates PHP versioonid 5 võite kasutada konstanti FILE_USE_INCLUDE_PATH faili otsimiseks kaasamise teel. Kontekstiparameeter tähistab funktsiooni stream_context_create() abil loodud kontekstiressurssi. Kui faili avamise katse ebaõnnestub, tagastatakse väärtus vale. Nihke parameeter sisaldab nihet, millest alustatakse andmete lugemist. Maxlen parameeter määrab vastuvõetud andmete suuruse.

    Märkus: kauglõngadega töötamisel nihet ei määrata.

Allpool on näide andmete saatmisest JSON-vormingus.

// Andmed saatmiseks $request = array("StartDate" => "2013-10-10", "EndDate" => "2013-10-10", "IDS" => array(1,2,3,4 ,5,6,7)); // Voo konteksti valikute määramine $options = array ("http" => massiiv ("method" => "POST", "header" => "Sisutüüp: application/json; charset=utf-8\r \ n", "sisu" => json_encode($request))); // Voo konteksti loomine $context = stream_context_create($options); // Andmete saatmine ja tulemuse saamine echo file_get_contents("http://test.ru/json.php", 0, $context);

Siin kasutatakse improviseeritud andmestruktuuri, mis koosneb algus- ja lõppkuupäevast ning mõnest tingimuslikud kanded. Pange tähele, et päringu päises Sisu tüüp tüüp "application/json" on määratud.

Andmete vastuvõtmine

Edastatud andmete vastuvõtmiseks ülalkirjeldatud viisil peate lugema andmeid sisendvoost " php://input”.

Andmete vastuvõtmiseks kasutatavad funktsioonid:

  • segatud json_decode (string json [, bool assoc = vale [, int sügavus = 512 [, int suvandid = 0 ]]])

    See funktsioon dekodeerib stringi JSON-vormingus. Parameeter json määrab dekodeeritava stringi. Assoc parameeter määrab, kas tagastatud andmed teisendatakse assotsiatiivne massiiv. Kui selline vajadus on, peate selle parameetri väärtuseks määrama tõsi. Sügavuse parameeter näitab rekursiooni sügavust. Ja viimane neljas parameeter, suvandid, sisaldab dekodeerimise valikute bitimaski. Hetkel ainult toetatud JSON_BIGINT_AS_STRING(vaikimisi teisendatakse suured täisarvud ujukomaarvudeks (ujukoma))

  • ressursi fopen (stringi failinimi, stringirežiim [, bool use_include_path [, ressursi kontekst]])

    Avab faili ja tagastab selle käepideme. Failinime parameeter on nimega ressurss, mis osutab failile. Mode parameeter määrab failile juurdepääsu tüübi (vt tabelit koos loendiga võimalikud režiimid fopen() jaoks). Järgmisena on kaks valikulist parameetrit: use_include_path ja kontekst. Kui määrate väärtusele use_include_path tõsi või 1 ja tingimusel, et nimetatud ressurss on seatud suhteline tee, otsitakse avatavat faili funktsioonide kasutatavate kataloogide loendist sisaldama Ja nõuda. Praktikas seda parameetrit praktiliselt ei kasutata. Konteksti parameetrit kasutatakse ressursi konteksti täpsustamiseks.

  • string stream_get_contents (ressursi käepide [, int maxlen = -1 [, int offset = -1 ]])

    See funktsioon võimaldab teil saada voo sisu stringina. Käepideme parameeter on lõime ressurss. Maxlen parameeter sisaldab maksimaalne summa bait lugemiseks. Vaikimisi on see väärtuseks -1, mis näitab, et kõik andmed on vastu võetud. Nihke parameeter sisaldab nihet, millest alustatakse andmete lugemist. Vaikimisi on see samuti seatud väärtusele -1, mis tähendab, et lugemine toimub lähtepositsioonist.

Allpool on näide JSON-vormingus andmete vastuvõtmisest serveri poolel.

// Avage sisendvoog lugemiseks $f = fopen("php://input", "r"); // Hangi voo sisu $data = stream_get_contents($f); if ($data) ( // Töötlemiskood print_r(json_decode($data)); )

Saadud andmestruktuur:

StdClass Object ( => 2013-10-10 => 2013-10-10 => massiiv ( => 1 => 2 => 3 => 4 => 5 => 6 => 7))

Märkus: tuleb arvestada asjaoluga, et JSON-vorminguga töötamiseks peavad andmed olema kodeeritud utf-8.

JSON andis funktsiooni json_encode() jaoks konstandid

JSON_HEX_TAG (täisarv) Kõik on kodeeritud \u003C ja \u003E. Saadaval alates PHP 5.3.0-st.
JSON_HEX_AMP (täisarv) Kõik & on kodeeritud &. Saadaval alates PHP 5.3.0-st.
JSON_HEX_APOS (täisarv) Kõik ' märgid on kodeeritud \u0027. Saadaval alates PHP 5.3.0-st.
JSON_HEX_QUOT (täisarv) Kõik " märgid on kodeeritud \u0022. Saadaval alates PHP 5.3.0.
JSON_FORCE_OBJECT (täisarv) Kui kasutate mitteassotsiatiivset massiivi, tagastab massiivi asemel objekt. See on kasulik, kui vastuvõttev programm või kood ootab objekti või massiiv on tühi. Saadaval alates PHP 5.3.0-st.
JSON_NUMERIC_CHECK (täisarv) Numbrite arvudena sisaldavate stringide kodeerimine. Saadaval alates PHP 5.3.3.
JSON_BIGINT_AS_STRING (täisarv) Kodeerib suured täisarvud nende stringi ekvivalentidena. Saadaval alates PHP 5.4.0.
JSON_PRETTY_PRINT (täisarv) Kasuta tühikud tagastatud andmetes selle vormindamiseks. Saadaval alates PHP 5.4.0.
JSON_UNESCAPED_SLASHES (täisarv) Ära põgene /. Saadaval alates PHP 5.4.0.
JSON_UNESCAPED_UNICODE (täisarv) Ärge kodeerige multibaite Unicode märgid(vaikimisi on need kodeeritud kui \uXXXX). Saadaval alates PHP 5.4.0.

Fopen() võimalike režiimide loend, kasutades režiimi

'r' Avab faili kirjutuskaitstud kujul; asetab kursori faili algusesse.
'r+' Avab faili lugemiseks ja kirjutamiseks; asetab kursori faili algusesse.
'w' Avab faili ainult kirjutamiseks; asetab kursori faili algusesse ja kärbib faili pikkuseks nulli. Kui faili pole olemas, proovib see seda luua.
'w+' Avab faili lugemiseks ja kirjutamiseks; asetab kursori faili algusesse ja kärbib faili pikkuseks nulli. Kui faili pole olemas, proovib see seda luua.
"a" Avab faili ainult kirjutamiseks; asetab kursori faili lõppu. Kui faili pole olemas, proovib see seda luua.
'a+' Avab faili lugemiseks ja kirjutamiseks; asetab kursori faili lõppu. Kui faili pole olemas, proovib see seda luua.
'x' Loob ja avab ainult kirjutamiseks; asetab kursori faili algusesse. Kui fail on juba olemas, ebaõnnestub fopen() kutse, tagastab FALSE ja kuvab veateate E_WARNING. Kui faili pole olemas, proovib see seda luua. See on samaväärne O_EXCL|O_CREAT-lippude määramisega sisemise jaoks süsteemikõne avatud (2).
'x+' Loob ja avab lugemiseks ja kirjutamiseks; muidu käitub samamoodi nagu 'x'.
'c' Avab faili ainult kirjutamiseks. Kui faili pole olemas, luuakse see. Kui fail on olemas, siis seda ei kärbita (erinevalt "w"-st) ja selle funktsiooni kutsumine ei põhjusta viga (nagu "x" puhul). Failikursor seatakse faili algusesse. See võib olla kasulik, kui soovite faili lukustada (vt flock()) enne selle muutmist, kuna 'w' kasutamine võib faili kärpida enne lukustamist (kui soovite faili kärpida, võite kasutada käsku ftruncate () funktsioon pärast luku taotlemist).
'c+' Avab faili lugemiseks ja kirjutamiseks; muidu käitub samamoodi nagu 'c'.

Tere kõigile! Selles artiklis vaatleme, kuidas NodeJS-is andmeid kliendile JSON-vormingus saata.

Sissejuhatus

Viimases artiklis vaatasime, kuidas NodeJS-is vooge kasutades kliendile HTML-lehti saata. Täna vaatame, kuidas andmeid JSON-vormingus saata.

Me ei kasuta selle probleemi lahendamiseks lõime, nii et saate eemaldada kogu nendega seotud koodi. Selle asemel kasutame end() meetodit, mis on meile juba tuttav ja mida kasutati ühes eelmises artiklis.

Kuidas saata JSON-i

Kõigepealt peame muutma päist, et brauser saaks meie andmeid õigesti töödelda:

Res.writeHead(200, ("Sisutüüp": "rakendus/json"));

Nüüd loome objekti, mille tahame kliendile saata:

Var myObj = (
nimi: "John",
töö: "programmeerija",
vanus: 27
};

Nüüd saadame andmed kliendile:

Res.end(myObj);

Kuid tegelikult ei tööta selline kood õigesti. Asi on selles, et meetod end() eeldab andmete nägemist stringivormingus või puhvris. Meil on objekt, kuid me saame sellest teha sellise stringi:

Res.end(JSON.stringify(myObj));

Nüüd, kui käivitate rakenduse, näete, et andmed tulid JSON-vormingus stringina. Samuti saate oma brauseris kasutada arendaja tööriistu ja vaadata, et ka päis oleks õigesti seatud.

Miks saata kliendile JSON-andmeid?

Teil võib tekkida küsimus, miks peate üldse kliendile JSON-vormingus andmeid saatma. Sellele küsimusele vastamiseks kujutage ette, et teie kliendi poolel (frontend) töötab mõni JavaScript ja see võib luua mingisuguse päringu. Näiteks on teil API. Võite kirjutada järgmise päringu:

Kohalik host: 3000 / api / taotlus

Ja server peab meile selle päringu jaoks andmed saatma. Kõige mugavam on need saata JSON-vormingus, et kliendi poolel töötav skript saaks neid andmeid hõlpsasti töödelda.

Järeldus

Nii vaatasime täna, kuidas NodeJS-is JSON-vormingus andmeid kliendile saata.

JSON-i kasutamine serveri poolel päringute vastuvõtmiseks ja vastuste loomiseks

Sisu seeria: JSON-i tegelik väärtus

Rääkisime sellest, kuidas JSON on mugav Ajaxi rakenduste andmevorminguna, kuna see võimaldab teil JavaScripti objekte kiiresti stringiväärtusteks teisendada ja vastupidi. Kuna Ajaxi rakendused sobivad kõige paremini lihtteksti saatmiseks ja vastuvõtmiseks, on peaaegu alati eelistatav kasutada API-d, mis suudab seda genereerida; Lisaks sellele funktsioonile võimaldab JSON teil töötada ka natiivsega JavaScripti objektid ja ärge muretsege selle pärast, kuidas need objektid tekstis välja näevad.

Ajaxi ressursikeskus developerWorksis
Vaadake oma Ajaxi programmeerimise ühtset allikat, kus on artikleid, õpetusi, foorumeid, ajaveebe, wikisid, sündmusi ja uudiseid. Kui midagi juhtub, on selle kohta info olemas.

XML-il on samad tekstivormingu eelised kui JSON-il, kuid API-d JavaScripti objektide XML-i teisendamiseks (ja neid on) ei ole nii hästi arenenud kui tarkvara liides JSON; Objektide loomisel ja muutmisel peate mõnikord tagama, et valitud API saaks nende objektidega normaalselt töötada. JSON-iga on see lihtsam: see käsitleb peaaegu igat tüüpi objekte ja lihtsalt tagastab teile andmed kena JSON-i esitusena.

Seega on JSON-i kõige olulisem väärtus see, et see võimaldab teil töötada JavaScriptiga nagu ka JavaScript, mitte nagu andmete vormindamise keele puhul. Nii saate rakendada kõiki omandatud oskusi JavaScripti objektidega töötamisel oma koodis, muretsemata selle pärast, kuidas need objektid tekstiks teisendatakse. Lõpus helistate lihtsalt lihtsale JSON-meetodile:

String myObjectInJSON = myObject.toJSONString();

ja saate sõnumi, mille saab serverisse saata.

JSON-i edastamine serverisse

JSON-andmete serverisse saatmises pole midagi eriti keerulist, kuid see on oluline kaalutlus ja teil on valida mitme valiku vahel. Kui aga valite JSON-i, on edasiste otsuste tegemine palju lihtsam, kuna valik väheneb oluliselt ja te ei pea selle pärast liiga palju muretsema. Lõpuks peate lihtsalt JSON-stringi serverisse edastama, eelistatavalt nii kiiresti ja lihtsalt kui võimalik.

JSON-i saatmine nime/väärtuse paarides, kasutades GET-meetodit

Lihtsaim viis JSON-andmete serverisse edastamiseks on teisendada need tekstiks ja saata need nime/väärtuse paari väärtusena. Pidage meeles, et JSON-vormingus andmed on vaid üks ilus suur objekt, mis näeb välja umbes nagu loendis 1 näidatud:

Loetelu 1. Lihtne JavaScripti objekt JSON-vormingus var people = ( "programmeerijad": [ ( "eesnimi": "Brett", "lastName":"McLaughlin", "email": " [e-postiga kaitstud]" ), ( "eesnimi": "Jason", "perenimi": "Jahimees", "e-post": " [e-postiga kaitstud]" ), ( "eesnimi": "Elliotte", "perenimi": "Harold", "e-post": " [e-postiga kaitstud]" ) ], "autorid": [ ( "eesnimi": "Iisak", "perenimi": "Asimov", "žanr": "ulme" ), ( "eesnimi": "Tad", "perenimi": " Williams", "žanr": "fantaasia" ), ( "eesnimi": "Frank", "perenimi": "Peretti", "žanr": "kristlik ilukirjandus") ], "muusikud": [ ( "eesnimi": "Eric", "perenimi": "Clapton", "instrument": "guitar" ), ( "eesnimi": "Sergei", "perenimi": "Rahmaninov", "instrument": "klaver" ) ] )

Seega saab selle teksti saata serveri skriptile nime/väärtuse paari sees järgmiselt:

var url = "organizePeople.php?people=" + people.toJSONString(); xmlHttp.open("GET", url, tõsi); xmlHttp.onreadystatechange = updatePage; xmlHttp.send(null);

Tundub, et siin on kõik korras, kuid tegelikult on üks konks: meie JSON-i andmestring sisaldab tühikuid ja muid märke, mida veebibrauser saab proovida tõlgendada. Et need märgid ei tekitaks serveris probleeme (ja ei segaks andmeedastust), tuleks koodile lisada JavaScripti funktsioon escape(). Nagu nii:

var url = "organizePeople.php?people=" + escape(inimesed.JSONString()); request.open("GET", url, true); request.onreadystatechange = updatePage; request.send(null);

See funktsioon käsitleb tühikuid, kaldkriipse ja kõike muud, mis võib brauserit segadusse ajada. See teisendab need selles mõttes "turvalisteks" tähemärkideks (nt tühik teisendatakse %20 paojärjestuseks, mida brauserid ei taju enam tühikuna, vaid edastavad lihtsalt muutmata kujul serverisse). Seejärel server käivitab pöördkonversioon(tavaliselt automaatselt) ja saame stringi sellisena, nagu see oli enne ülekandmist.

Sellel lähenemisviisil on kaks puudust:

  • Esiteks saadame andmed, mis võivad olla väga suured, kasutades GET-päringut, mille URL-i stringi pikkus on piiratud. Maksimaalne lubatud rea suurus on väga suur, kuid me ei tea kunagi, kui palju pikk nöör saame pärast objekti tekstiks teisendamist, eriti kui see objekt on üsna keeruline.
  • Teiseks saadame andmeid läbi võrgu selges tekstis– ehk kõige ebaturvalisem kõigist kujuteldavatest andmeedastusmeetoditest.

Selguse huvides on need mõlemad puudused rohkem seotud GET-i päringute piirangutega kui JSON-i eripäradega. Kui aga saadate serverisse rohkem kui ainult kasutaja perekonna- või eesnime või tema valiku tulemuse oma saidil olevas vormis, võivad need puudused teie elu tõesti ära rikkuda. Kui hakkate töötama andmetega, mis võivad olla vähemalt mõnevõrra konfidentsiaalsed või suur suurus, peaksite kindlasti pöörama tähelepanu POST-i päringutele.

JSON-andmete edastamine POST-meetodi abil

Kui otsustate kasutada JSON-i andmete serverisse saatmiseks POST meetod GET asemel siis suuri muutusi Te ei pea seda koodile lisama. Siin on kõik, mida pead tegema.

var url = "organizePeople.php?timeStamp=" + new Date().getTime(); request.open("POSTITUS", url, tõsi); request.onreadystatechange = updatePage; request.setRequestHeader("Sisutüüp", "Application/x-www-vorm-urlencoded"); request.send(inimesed.JSONString());

Suurem osa sellest koodist peaks olema tuttav artiklist ":", mis käsitles POST-i päringute loomist. Siin avame päringu GET-i asemel POST-i abil ja määrame soovitud andmete tüübi näitamiseks sobiva päise "Content-Type". sel juhul see näeb välja selline: application/x-www-form-urlencoded , mis teeb serverile selgeks, et edastame ainult tekstiandmeid, mida ta võiks põhimõtteliselt saada tavaliselt HTML-vormilt.

Veel üks väike muudatus koodis on lisada Praeguse URL-i aega. Seda tehakse selleks, et vältida päringute vahemällu salvestamist ning tagada nende loomine ja saatmine iga kord, kui meetodit kutsutakse; URL stringid on ajatempli muutumise tõttu iga kord veidi erinev. See on tavaliselt kasutatav tehnika tagamaks, et POST-i päring genereeritakse iga kord uuesti ja veebibrauser ei ürita serveri vastuseid vahemällu salvestada.

JSON on lihtsalt tekst

Kell kasutades GET-i ja POST nõuab, et on väga oluline, et JSON oleks lõppude lõpuks lihttekst. Seda saab hõlpsasti manipuleerida ja serverisse edastada, kuna see ei vaja spetsiaalset kodeerimist. Tekstiandmeid saab töödelda mis tahes serveriskriptiga. Kui JSON oleks binaarvorming või mõni nutikalt kodeeritud tekst, poleks kõik nii lihtne. Seega on JSON lihttekstiandmed, mida skript võib põhimõtteliselt saada HTML-vormi esitamisel (nagu nägime POST-i päringute päises "Content-Type"), nii et te ei pea saatmise pärast liiga palju muretsema. see serverisse.

JSON-i tõlgendamine serveris

Kui olete oma kliendipoolse JavaScripti koodi kirjutanud, et kasutajad saaksid teie veebilehtede ja vormidega suhelda ning teabe töötlemiseks esitada. serveriprogramm, on teie rakenduse (ja tõenäoliselt ka kõiges, mida me nimetame "Ajaxi rakendusteks", eeldades, et serveri skripti kutsumine toimub asünkroonselt) peamine mängija server. Ja siin peab kliendi poolel tehtud valik, otsustades kasutada JavaScripti objekte ja JSON-andmeid, kattuma vastava otsusega serveri poolel, kus on valitud API JSON-andmete dekodeerimiseks.

JSON-i serverisse süstimise kaks etappi

Töötage JSON-iga serveri poolel, olenemata sellest, mida kasutate serveri keel koosneb põhiliselt kahest etapist:

  • JSON-i parseri/tööriistakomplekti/abistaja API leidmine oma serveripoolse keele jaoks
  • JSON-i parseri/tööriistakomplekti/abistaja API kasutamine kliendipäringu andmete eraldamiseks ja serveriskriptile arusaadavasse vormi teisendamiseks
  • Ja see on kõik. Vaatame mõlemat etappi lähemalt.

    Otsige JSON-parserit

    Parim ressurss JSON-parseri ja muude JSON-iga seotud tarkvaratööriistade leidmiseks on JSON-i veebisait (vt linke ). Lisaks vormingu enda kohta käivale harivale teabele leiate sellelt lehelt linke JSON-tööriistadele ja JSON-parseritele mis tahes platvormile: ASP-st Erlangini, Pike'ist Rubyni. Lihtsalt otsige sealt üles keel, milles teie skript on kirjutatud, ja laadige alla sobiv tööriistakomplekt. Kopeeri see endale või uuenda sellega oma serverikeele versiooni või lihtsalt installeeri (võimalusi on palju: kõik oleneb sellest, mida serveris kasutad: C#, PHP, Lisp või midagi muud), peaasi, et skriptid või programmid, mida olete oma serveris kasutanud.

    Näiteks kui kasutate PHP-d, saate selle lihtsalt värskendada uusimale versioonile 5.2, mis sisaldab vaikimisi JSON-laiendit. See on tõenäoliselt lihtsaim viis JSON-iga alustamiseks, kui kasutate PHP-d. Kui kasutate Java servlette, on lihtsaim viis kasutada json.org-i paketti org.json. Selleks peate JSON-i veebisaidilt alla laadima arhiivi json.zip, kopeerima failid lähtekoodid oma projekti kompileerimiskataloogi ja kompileerige need vastavalt – ja saate töötada JSON-iga. Ligikaudu sama tuleb teha ka teiste keelte kasutamisel; parim abimees See hõlmab teie enda programmeerimiskogemust sobiva serveriplatvormi jaoks.

    JSON-parseri kasutamine

    Pärast vajalike tööriistade paigaldamist jääb üle vaid helistada soovitud meetod. Oletame näiteks, et kasutame PHP-d ja JSON-PHP moodulit:

    // See on vaid fragment suurest serveripoolsest PHP-skriptist request_once("JSON.php"); $json = uus Teenused_JSON(); // aktsepteerige POST-i andmeid ja dekodeerige need $value = $json->decode($GLOBALS["HTTP_RAW_POST_DATA"]); // Nüüd töötame muutujaga $value nagu tavaliste PHP töötlemata andmetega

    Selle koodi abil paigutame kõik andmed (massiivid, mitu stringi, üksikud väärtused – kõik, mis oli JSON-i andmestruktuuris) muutujasse $value ja algsesse PHP-vormingusse.

    Kui kasutaksime serveris Java servlette ja paketti org.json, näeks kood välja umbes selline:

    public void doPost(HttpServletRequest taotlus, HttpServletResponse vastus) viskab ServletExceptioni, IOExceptioni ( StringBuffer jb = new StringBuffer(); String line = null; try ( BufferedReader reader = request.getReader(); while ((line( read)).read != null) jb.append(line ) püüdmine (Erand e) ( //veateade) try ( JSONObject jsonObject = new JSONObject(jb.toString()); ) püüdmine (ParseException e) ( // krahh ja põletamine); throw new IOException("Viga päringustringi sõelumisel") // Töötame andmetega, kasutades selliseid meetodeid: // int someInt = jsonObject.getInt("intParamName"); // String someString = jsonObject.getString("stringParamName"); ; "); // JSONObject nestedObj = jsonObject.getJSONObject("nestedObjName"); // JSONArray arr = jsonObject.getJSONArray("arrayParamName"); // ja nii edasi... )

    Lisateavet leiate paketi org.json dokumentatsioonist (vt jaotises olevaid linke). (Märkus. Kui soovite org.jsoni või muud JSON-tarkvara üksikasjalikumalt uurida, saatke mulle meil ja andke teada. Teie tagasiside aitab mul otsustada, millest järgmisena kirjutada!).

    Järeldus

    Nüüdseks peaksite juba teadma tehniline pool kasutades serveris JSON-i. Kuid selles ja artiklites tahtsin ma mitte ainult näidata mitut tehnilisi aspekte, vaid ka selleks, et veenda teid, et JSON on väga paindlik ja võimas andmevorming. Isegi kui te seda igas rakenduses ei kasuta, peaks heal Ajaxi ja JavaScripti programmeerijal see alati käepärast olema. kasulik tööriist ja oskama seda vajadusel kasutada.

    Tahaksin kindlasti teie omast kuulda enda kogemus töötades JSON-iga ja millised keeled töötavad teie arvates hästi (või võib-olla mitte nii hästi), kui JSON-i andmed on serveri poolel. Vaadake Java ja XML uudisterühma lehte (lingid sees) ja rääkige mulle sellest. Nautige JSON-i ja kõiki teksti andmevormingute võimalusi.

    9 vastust

    Sain siit palju teavet, nii et tahtsin postitada leitud lahenduse.

    Probleem: JSON-andmete toomine Javascriptist brauseris, serveris ja nende edukaks sõelumiseks PHP kasutamine.

    Keskkond: Javascript brauseris (Firefox) Windowsis. LAMP server as kaugserver: PHP 5.3.2 Ubuntus.

    Mis töötab (versioon 1):
    1) JSON on lihtsalt tekst. Tekst kindlas vormingus, kuid ainult tekstistring.

    2) Javascriptis annab var str_json = JSON.stringify(myObject) mulle JSON-stringi.

    3) Kasutan andmete serverisse saatmiseks Javascriptis AJAX XMLHttpRequest objekti:
    request= new XMLHttpRequest()
    request.open("POST", "JSON_Handler.php", tõsi)
    request.setRequestHeader("Sisutüüp", "Application/json")
    request.send(str_json)
    [... kood vastuse kuvamiseks ...]

    4) JSON-stringi lugemiseks serveri PHP-koodis:
    $str_json = file_get_contents("php://input");
    See loeb töötlemata POST-andmeid. $str_json sisaldab nüüd täpset JSON-stringi brauserist.

    Mis töötab (versioon 2):
    1) Kui tahan kasutada päringu päist "application/x-www-form-urlencoded", pean looma standardne string POSTITA "x=y&a=b", et kui see PHP hankimine selle saab paigutada assotsiatiivsesse massiivi $_POST. Niisiis, Javascriptis brauseris:

    Var str_json = "json_string=" + (JSON.stringify(myObject))

    Nüüd saab PHP täita massiivi $_POST, kui saadan str_jsoni AJAX/XMLHttpRequesti kaudu nagu ülaltoodud versioonis 1.

    $_POST["json_string"] sisu kuvamisel kuvatakse JSON-string. Funktsiooni json_decode() kasutamine massiivi $_POST elemendil json-stringiga dekodeerib need andmed õigesti ja asetab need massiivi/objekti.

    Lõks, millega kokku puutusin:
    Algselt proovisin saata JSON-stringi rakenduse päisega /x -www-form-urlencoded ja siis proovisin seda kohe lugeda PHP massiivist $_POST. Massiiv $_POST oli alati tühi. Seda seetõttu, et see eeldab andmeid kujul yval = xval & . Ta ei leidnud selliseid andmeid, vaid JSON-stringi ja viskas selle lihtsalt minema. Vaatasin päringu päiseid ja POST andmed saadeti õigesti.

    Samamoodi, kui ma kasutan rakenduse/jsoni päist, ei pääse ma uuesti massiivi $_POST kaudu saadetavatele andmetele juurde. Kui soovite kasutada rakenduse sisu päist/jsoni, peate pääsema juurde toorfailile POST-andmed PHP-s kaudu php sisend://, mitte $_POST-iga.

    Kirjandus:
    1) Kuidas pääseda juurde POST-andmetele PHP-s: kuidas pääseda juurde POST-andmetele PHP-s?
    2) detailne info rakenduse/json-tüübi kohta koos mõnede näidisobjektidega, mida saab JSON-stringideks teisendada ja serverisse saata: http://www.ietf.org/rfc/rfc4627.txt< ш >

    Javascripti fail kasutades jQueryt (puhtam, kuid teegi ülekulu):

    $.ajax(( tüüp: "POST", url: "process.php", andmed: (json: JSON.stringify(json_data)), andmetüüp: "json" ));

    PHP-fail (process.php):

    Juhised = json_decode($_POST["json"]); var_dump(directions);

    Pange tähele, et kui kasutate JavaScriptis tagasihelistamisfunktsioone:

    $.ajax(( tüüp: "POST", url: "process.php", andmed: (json: JSON.stringify(json_data)), dataType: "json" )) .done(function(data) ( console.log ("tehtud");

    Peate oma PHP-failis tagastama JSON-objekti (Javascripti vormingus), et saada oma failis "tehtud/edustunud". Javascripti kood. Minimaalse tagastamise/prindiga:

    Prindi ("()");

    Kuigi kõige tõsisema puhul tuleks selgesõnaliselt saata õige pealkiri vastava vastusekoodiga.

    Andmete saatmiseks kliendi poolelt (HTML, Javascript, Vbscript.. jne) on kolm asjakohast viisi serveri pool(PHP, ASP, JSP jne)

    1. HTML vorm Postitustaotlus (GET või POST). 2. AJAX (see tuleb ka GET ja POST alla) 3. Küpsis

    HTML-postituse taotluse vorm (GET või POST)

    See on kõige sagedamini kasutatav meetod ja selle meetodi abil saame saata rohkem andmeid.

    See on asünkroonne meetod ja see peaks töötama ohutul viisil, siin saame saata ka rohkem andmeid.

    See hea viis kasutage väikest hulka mittetundlikke andmeid. See Parim viis töötamine andmebitiga.

    Teie puhul võite eelistada HTML-vormingut või AJAX-i. Kuid enne serverisse saatmist kinnitage oma JSON ise või kasutage linki, näiteks http://jsonlint.com/

    Kui Json Object teisendab selle stringiks, kasutades JSON.stringify(object), saatke see sellisel kujul, kui teil on JSON-string.

    Lihtne JavaScripti näide HTML-väljade sisestamiseks (JSON-i saatmine serverisse, JSON-i sõelumine PHP-s ja tagasisaatmine kliendile) AJAX-i abil:

    Perekonnanimi
    Vanus
    Näita var xmlhttp; funktsioon actionSend() ( if (window.XMLHttpRequest) (// kood IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); ) else (// kood IE6, IE5 jaoks xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); ) var väärtused = $("sisend").map(function () ( return $(this).val() ; ) ).get(); var myJsonString = JSON.stringify(väärtused); xmlhttp.onreadystatechange = vastata; xmlhttp.open("POST", "ajax-test.php", true); xmlhttp.send(minuJsonString); ) funktsioon response() ( if (xmlhttp.readyState == 4 && xmlhttp.status == 200) ( document.getElementById("result").innerHTML = xmlhttp.responseText; ) )

    PHP-fail ajax-test.php: