Home Php Come cercare dati in JSON usando PHP

Come cercare dati in JSON usando PHP

47
0

Mentre SQL viene utilizzato per interrogare i dati nei database relazionali (come MySQL), la ricerca di informazioni specifiche all’interno di stringhe JSON presenta una sfida diversa.

Sebbene JSON possa essere utilizzato per archiviare dati simili a quelli di una tabella di database relazionale, ha un formato diverso, la cui interrogazione richiede un approccio differente.
In questa guida ti mostrerò come cercare in modo efficace dati specifici in JSON utilizzando PHP con numerosi esempi.

$jsondata = file_get_contents("path/to/file.json");

JSON è costituito da coppie chiave-valore, array e oggetti. Le coppie sono separate da virgole e ciascuna è costituita da una chiave (tra virgolette doppie), seguita da due punti e quindi da un valore (stringa, numero, oggetto JSON, array, booleano o null). Gli oggetti sono racchiusi tra parentesi graffe {} e gli array tra parentesi quadre [].

$jsondata = file_get_contents("php://input");

Per accedere ai dati memorizzati in un file JSON in PHP, utilizziamo la file_get_contents()funzione con il percorso del file come argomento.

Quando riceviamo dati JSON da una richiesta POST in PHP, utilizziamo la file_get_contents()funzione con la stringa “php://input” come argomento.

In PHP, i dati JSON vengono decodificati in array per la manipolazione.

Esempio

$jsonData = '{"name": "John Doe", "age": 30, "city": "New York"}';
$decodedData = json_decode($jsonData, true);
print_r($decodedData);

Ricerca di dati JSON tramite PHP

Per le dimostrazioni, utilizzeremo i dati JSON di seguito memorizzati in un file denominato “users.json” situato nella stessa directory dello script PHP. Comprende un oggetto “users”, che è un array contenente cinque oggetti in cui ogni oggetto è un record di un utente comprendente i suoi dettagli.

 

Restituiremo uno o più record in base ai parametri di ricerca.

Esempio 1: Ricerca di un record utente utilizzando una chiave univoca

Se l’oggetto JSON dell’utente è costituito da un array di oggetti con valori univoci per una determinata chiave, come l’ID o l’email come nel nostro esempio, possiamo utilizzarlo per recuperare un oggetto specifico.

<?php
$json = file_get_contents('users.json');
$decoded = json_decode($json, true);
$users = $decoded["users"];

$id = 3;

foreach ($users as $user) {
    if ($user["id"] == $id) {
        $result = $user;
        break;
    }
}

if(isset($result)){
    // Returning result as an array
    print_r($result);
    echo "<br><br>";

    // Returning result as a JSON string
    echo json_encode($result);
    echo "<br><br>";

    // Displaying individual values of result
    echo "ID: ".$result["id"]."<br>";
    echo "Name: ".$result["name"]."<br>";
    echo "Email: ".$result["email"]."<br>";
    echo "Age: ".$result["age"]."<br>";
    echo "country: ".$result["country"];
}
else{
    echo "Record not found";
}
?>

Un equivalente della query SQL;

 

In questo esempio, abbiamo avuto accesso al contenuto del file “users.json”, lo abbiamo decodificato in un array e abbiamo avuto accesso al valore dell’oggetto “users”, che comprende cinque array associativi. Abbiamo quindi eseguito l’iterazione tramite il foreach()loop, controllando e confrontando il valore dell’elemento “id” con quello dell’elemento $id che stavamo cercando tramite l’ ==operatore di confronto ( ).

Se i due ID corrispondono, otteniamo l’elemento corrente (array), lo memorizziamo nella variabile $result e interrompiamo il ciclo poiché abbiamo già trovato ciò che stavamo cercando.

Al di fuori del ciclo, utilizziamo la isset()funzione per verificare se la variabile $result è stata impostata e utilizziamo il suo valore come desideriamo.

<?php
$json = file_get_contents('users.json');
$decoded = json_decode($json, true);
$users = $decoded["users"];

$result = array();
foreach ($users as $user) {
    if ($user["age"] >= 30) {
        $result[] = $user;
    }
}


// Displaying result as an array
print_r($result);
echo "<br><br>";

// Displaying result as a JSON string
echo json_encode($result);
?>

Se volessimo effettuare una ricerca per email, dove email è univoco per ogni record, dovremmo sostituire if ($user["id"] == $id) {con if ($user["email"] == $email) {.

Esempio 2: ricerca di più record

In alcuni casi, più record corrisponderanno ai tuoi parametri di ricerca. Ad esempio, nella nostra stringa JSON, ogni utente ha un’età diversa, e le loro età variano tra 25 e 35 anni.

Vogliamo restituire i dettagli dell’utente la cui età è maggiore o uguale a 30 anni.

 

Esempio 3: Ricerca di record che contengono una determinata frase

Potrebbe essere necessario cercare e restituire gli oggetti/record la cui coppia chiave-valore contiene uno specifico carattere, parola o frase.

<?php
$json = file_get_contents('users.json');
$decoded = json_decode($json, true);
$users = $decoded["users"];
$searchword = "david";
$result = array();
foreach ($users as $user) {
    if(stripos($user["name"], $searchword) !== false){
        $result[] = $user;
    }
}
// Displaying result as an array
print_r($result);
echo "<br><br>";
// Displaying result as a JSON string
echo json_encode($result);
?>

n questo esempio, abbiamo cercato record in cui il nome dell’utente contiene il termine “david”. Puoi cercare qualsiasi elemento dell’array con qualsiasi termine all’interno dell’array.

Questo è tutto!

Ora puoi cercare ed estrarre informazioni dalle stringhe JSON in PHP.

Previous articleCome contarare le lettere prima di una determinata parola
Next articlePHP array_key_exists() Function

LEAVE A REPLY

Please enter your comment!
Please enter your name here