Salt la conținut

SUBIECTE NOI
« 1 / 5 »
RSS
Baterie externa solara vs baterie...

recomandare placa captura video

Trecere apartament pe numele meu

Seria 3 - E90 / 91
 LakeSide 11 Straulesti

arii

Sapa peste pardoseala

Smart phone pentru auz deficitar
 Manager transport marfa. Pareri. ...

BIOS F.24 pentru HP Pavilion g7-2...

Meta Quest 3 512 gb

Father's Day
 Clipboard files copy/paste, filen...

Boardgame-uri despre cuvinte

Care-i treaba cu Reddit-ul? (nu m...

Diferente diferentiale
 

Preg_Match_All din Json

- - - - -
  • Vă rugăm să vă autentificați pentru a răspunde
7 răspunsuri în acest subiect

#1
phpguru

phpguru

    Junior Member

  • Grup: Members
  • Mesaje: 127
  • Înscris: 12.07.2012
Salut,

Am o sursa json (link) si as vrea sa o extrag cu preg_match_all conform codului de mai jos. Cu json l-am facut insa incarca greu deoarece codul are peste 5k linii, iar cu preg_match_all incarca instant. Codul este cam asa:

{"tara":"ro","oras":"Bucuresti","tip":"TEST 1","descriere":"LINIA 1"}, {"tara":"ro","tip":"TEST 2","apropiere":"ILFOV","descriere":"LINIA 2"}


In linia TEST1 apare "oras", iar in linia TEST 2 apare "apropiere". Nu reusesc sa extrag "oras" si "apropiere" atunci cand exista, sa le afiseze doar daca exista.

#2
Turcalet

Turcalet

    Member

  • Grup: Members
  • Mesaje: 285
  • Înscris: 26.12.2020
Pare un job pentru NodeJS.

Mai intai trebuie sa parsezi JSON-ul asta in obiecte / array PHP si dupa aia sa traversezi si sa verifici cu array_key_exists.

#3
robert23mg

robert23mg

    Member

  • Grup: Members
  • Mesaje: 556
  • Înscris: 18.06.2017
Ceva de genul ai nevoie?
https://imgur.com/a/Jg3ECT4

#4
phpguru

phpguru

    Junior Member

  • Grup: Members
  • Mesaje: 127
  • Înscris: 12.07.2012

View PostTurcalet, on 25 aprilie 2023 - 02:06, said:

Pare un job pentru NodeJS.

Mai intai trebuie sa parsezi JSON-ul asta in obiecte / array PHP si dupa aia sa traversezi si sa verifici cu array_key_exists.
La NodeJS sunt paleta, nu am facut niciodata.

View Postrobert23mg, on 25 aprilie 2023 - 06:21, said:

Ceva de genul ai nevoie?
https://imgur.com/a/Jg3ECT4
Nu chiar, pt ca intre oras si apropiere ai tip. Cu celelalte cum ramane? Tara, descriere si tip?

#5
phpguru

phpguru

    Junior Member

  • Grup: Members
  • Mesaje: 127
  • Înscris: 12.07.2012
function curl( $url ) {
$ua = ["Mozilla/5.0 (Macintosh; Intel Mac OS X 12_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/100.0.1185.39",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 OPR/86.0.4363.23",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36"] ;
$agent = $ua[mt_rand( 0, count( $ua ) - 1 )] ;
$curl = curl_init() ;
curl_setopt( $curl, CURLOPT_URL, $url ) ;
curl_setopt( $curl, CURLOPT_REFERER, $url ) ;
curl_setopt( $curl, CURLOPT_AUTOREFERER, true ) ;
curl_setopt( $curl, CURLOPT_USERAGENT, $agent ) ;
curl_setopt( $curl, CURLOPT_HEADER, false ) ;
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true ) ;
curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, true ) ;
curl_setopt( $curl, CURLOPT_MAXREDIRS, 10 ) ;
curl_setopt( $curl, CURLOPT_NOSIGNAL, true ) ;
curl_setopt( $curl, CURLOPT_TIMEOUT_MS, 5000 ) ;
curl_setopt( $curl, CURLOPT_CONNECTTIMEOUT_MS, 5000 ) ;
curl_setopt( $curl, CURLOPT_SSL_VERIFYHOST, 0 ) ;
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false ) ;
//curl_setopt( $curl, CURLOPT_FRESH_CONNECT, true ) ;
curl_setopt( $curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 ) ;
$result = curl_exec( $curl ) ;
curl_close( $curl ) ;
return $result ;
}
$curl = curl( "https://www.waze.ro/georss.php?top=45.9&bottom=24.9&right=30&left=20&nocache=" . microtime( true ) * 1000 ) ;
preg_match_all( "#\"country\":\"RO\".+?(\"city\":\"(.+?)\".+?)?\"type\":\"ACCIDENT\".+?\"subtype\":\"(|(.+?))\".+?\"street\":\"(|(.+?))\".+?(\"nearBy\":\"(.+?)\".+?)?\"location\":{\"x\":(.+?),\"y\":(.+?)}.+?\"pubMillis\":(.+?)},{#si", $curl, $matches ) ;
echo "<pre>" ;
print_r( $matches ) ;
echo "</pre>" ;


city este oras si nu apare tot timpul, nearby este apropiere si nu apare tot timpul. Asa am incercat sa-l fac, insa imi afiseaza un singur rezultat, desi normal ar trebui sa-mi afiseze cate rezultate (tip ACCIDENT) sunt.

#6
luckybastard

luckybastard

    Junior Member

  • Grup: Junior Members
  • Mesaje: 25
  • Înscris: 01.09.2021
@phpguru de ce nu merge sa parsezi tot cu `json_decode()` si sa treci cu un `foreach()` prin toate rezultatele? Am impresia ca doar te complici aici cu regex.

#7
phpguru

phpguru

    Junior Member

  • Grup: Members
  • Mesaje: 127
  • Înscris: 12.07.2012

View Postluckybastard, on 25 aprilie 2023 - 13:10, said:

@phpguru de ce nu merge sa parsezi tot cu `json_decode()` si sa treci cu un `foreach()` prin toate rezultatele? Am impresia ca doar te complici aici cu regex.
Json_decode nu afiseaza fisiere mari sau le afiseaza cu intarziere. Insa mi-a venit alta idee:
- salvez informatia din link (extern) in local (pe site-ul meu),
- setez un cron pt actualizare informatie cu interval de timp
- in final parsez informatia cu json_decode direct din local.
Anyway, multumesc.

#8
luckybastard

luckybastard

    Junior Member

  • Grup: Junior Members
  • Mesaje: 25
  • Înscris: 01.09.2021

View Postphpguru, on 25 aprilie 2023 - 15:41, said:

Json_decode nu afiseaza fisiere mari sau le afiseaza cu intarziere

Nu prea inteleg cum ar veni asta. Acest link iti da un singur raspuns in format JSON, "json_decode()" se descurca destul de bine cu parsarea acestuia in timpi destul de ok.
E prea mult sa faci asta la fiecare request (daca merge vorba de un web app aici, trebuie sa specifici mai exact contextul problemei) — da, probabil.
Dar asta deja tine de cum iti organizezi tu solutia.

Intrebarea initiala era despre parsarea propriu zisa a response-ului in format JSON dintr-un URL. E o idee foarte proasta sa incerci sa parsezi JSON-ul cu regex atunci cand solutia "oficiala" e mult mai flexibila si rapida, parerea mea.

Spor!

Anunturi

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

www.neurohope.ro

Utilizatori activi: 1

0 membri, 1 vizitatori, 0 utilizatori anonimi

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate