Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Masina de tuns... buruieni

Recomandare drona

Exista un soft care sa reia autom...

Identificare plante
 Cum declari o variabila care nu s...

Schimbare certificat de inmatricu...

Poligon auto București

nelamurire legata de pret la mode...
 Hotel cu restaurant si Demipensiu...

Croaziera in Mediterana de Vest 1...

Copilot are pica pe Vladimir Putin

MicroSoft Edge: Cum pun Google in...
 Dashcam

Mini server - VMware

betano.ro

Poveste fara sfarșit
 

Preg_Match_All din Json

- - - - -
  • Please log in to reply
7 replies to this topic

#1
phpguru

phpguru

    Junior Member

  • Grup: Members
  • Posts: 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
  • Posts: 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
  • Posts: 549
  • Înscris: 18.06.2017
Ceva de genul ai nevoie?
https://imgur.com/a/Jg3ECT4

#4
phpguru

phpguru

    Junior Member

  • Grup: Members
  • Posts: 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
  • Posts: 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
  • Posts: 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
  • Posts: 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
  • Posts: 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

Second Opinion Second Opinion

Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale.

Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

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