Come creare un array per JSON usando PHP?


126

Dal codice PHP voglio creare un array json:

[
  {"region":"valore","price":"valore2"},
  {"region":"valore","price":"valore2"},
  {"region":"valore","price":"valore2"}
]

Come posso fare questo?


Risposte:


154

Spremuta di limone facile e peasy: http://www.php.net/manual/en/function.json-encode.php

<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);

echo json_encode($arr);
?>

C'è un post di andyrusterholz at g-m-a-i-l dot c-o-mnella pagina sopra menzionata che può anche gestire array nidificati complessi (se è la tua cosa).


2
Dang, amico, eri istantaneo su quella risposta =). Ero eccitato per la semplice domanda =)
Calvin Froedge del

2
Ho questo codice mentre ($ row = mysql_fetch_assoc ($ query_insert)) {$ control = array ('regione' => $ row ["regione"], 'totale' => $ row ["prezzi"]); } print (json_encode (% control)); ma riesegui {"regione": "Puglia", "totale": "5.15"} non [{..}, {..}]
Mimmo

2
Aggiungi 1 per il riferimento al limone. :-)
divieto di geoingegneria il

L'ho fatto ma la risposta che ottengo usando la funzione var_dumb è la seguente. Come posso eliminare la stringa (59)? string (59) "[{" result ":" success "}, {" message ":" Dati aggiornati! "}]"
James Smith

115

Usa il nativo di PHP json_encode, in questo modo:

<?php
$arr = array(
    array(
        "region" => "valore",
        "price" => "valore2"
    ),
    array(
        "region" => "valore",
        "price" => "valore2"
    ),
    array(
        "region" => "valore",
        "price" => "valore2"
    )
);

echo json_encode($arr);
?>

Aggiornamento : per rispondere alla tua domanda nel commento. Lo fai in questo modo:

$named_array = array(
    "nome_array" => array(
        array(
            "foo" => "bar"
        ),
        array(
            "foo" => "baz"
        )
    )
);
echo json_encode($named_array);

2
Mi scusi ma se voglio {"nome_array": [{"foo": "bar"}, {"foo": "baz"}]} ??
Mimmo,

41

Semplice: basta creare un array PHP (nidificato) e chiamarlo json_encode. Le matrici numeriche si traducono in liste JSON ( []), le matrici associative e gli oggetti PHP si traducono in oggetti ( {}). Esempio:

$a = array(
        array('foo' => 'bar'),
        array('foo' => 'baz'));
$json = json_encode($a);

Ti dà:

[{"foo":"bar"},{"foo":"baz"}]

1
Mi scusi ma se voglio {"nome_array": [{"foo": "bar"}, {"foo": "baz"}]} ??
Mimmo,

2
Leggi di nuovo il mio post. Se vuoi che qualcosa si traduca in un oggetto JSON, rendilo un array associativo in PHP (dove le chiavi sono stringhe). Se vuoi che si traduca in un elenco JSON, rendilo un array semplice (con chiavi integer implicite). Il valore di ciascun elemento dell'array può a sua volta essere un array, che è quello che vuoi.
tdammers,

Grazie ha risposto anche alla mia domanda.
Shawn Wernig,

L'ho fatto ma la risposta che ottengo usando la funzione var_dumb è la seguente. Come posso eliminare la stringa (59)? string (59) "[{" result ":" success "}, {" message ":" Dati aggiornati! "}]"
James Smith

13

Il modo migliore che dovresti fare ogni volta per creare json in php è prima convertire i valori in array ASSOCIATIVO.

Dopo di ciò basta semplicemente codificare usando json_encode($associativeArray). Penso che sia il modo migliore per creare json in php perché ogni volta che recuperiamo risultati da query sql in php il più delle volte otteniamo valori usando la fetch_assocfunzione, che restituisce anche un array associativo.

$associativeArray = array();
$associativeArray ['FirstValue'] = 'FirstValue';

... eccetera.

Dopo di che.

json_encode($associativeArray);

3

anche per array puoi usare una breve annotazione:

$arr = [
    [
        "region" => "valore",
        "price" => "valore2"
    ],
    [
        "region" => "valore",
        "price" => "valore2"
    ],
    [
        "region" => "valore",
        "price" => "valore2"
    ]
];

echo json_encode($arr);

3

Ecco come sono in grado di fare con l'aiuto della soluzione fornita da @tdammers di seguito. La seguente riga verrà inserita all'interno di ogni ciclo.

$array[] = array('power' => trim("Some value"), 'time' => "time here" );

E quindi codificare l'array con la funzione di codifica json

json_encode(array('newvalue'=> $array), 200)

1

Basta digitare questa riga per ottenere un array json,

echo json_encode($array);

Normalmente usi json_encodeper leggere i dati da un'app iOS o Android. quindi assicurati di non fare eco a nient'altro che all'accurata matrice json.


1
$json_data = '{ "Languages:" : [ "English", "Spanish" ] }';
$lang_data = json_decode($json_data);
var_dump($lang_data);

Come aggiungerebbe in modo dinamico una nuova lingua al nodo delle lingue in PHP? Grazie.

0
<?php 

    $username=urldecode($_POST['log_user']);

    $user="select * from tbl_registration where member_id= '".$username."' ";
    $rsuser = $obj->select($user);
    if(count($rsuser)>0)
    {
        //   (Status if 2 then its expire)    (1= use) ( 0 = not use)

        $cheknew="select name,ldate,offer_photo  from tbl_offer where status=1 ";
        $rscheknew = $obj->selectjson($cheknew);

        if(count($rscheknew)>0)
        {

             $nik=json_encode($rscheknew);
            echo "{\"status\" : \"200\" ,\"responce\" : \"201\", \"message\" : \"Get Record\",\"feed\":".str_replace("<p>","",$nik). "}";
        }
        else
        {
            $row2="No Record Found";
            $nik1=json_encode($row2);
            echo "{\"status\" : \"202\",  \"responce\" : \"604\",\"message\" : \"No Record Found \",\"feed\":".str_replace("<p>","",$nik1). "}";
        }
    }
    else
    {
        $row2="Invlid User";
        $nik1=json_encode($row2);
        echo "{\"status\" : \"404\", \"responce\" : \"602\",\"message\" : \"Invlid User \",\"feed\":".str_replace("<p>","",$nik1). "}";
    }

 ?>

0

Ho creato una classe jsonOBJ grezza e semplice da utilizzare per il mio codice. PHP non include le funzioni json come JavaScript / Node. Devi iterare diversamente, ma può essere utile.

<?php

// define a JSON Object class
class jsonOBJ {
    private $_arr;
    private $_arrName;

    function __construct($arrName){
        $this->_arrName = $arrName;
        $this->_arr[$this->_arrName] = array();

    }

    function toArray(){return $this->_arr;}
    function toString(){return json_encode($this->_arr);}

    function push($newObjectElement){
        $this->_arr[$this->_arrName][] = $newObjectElement; // array[$key]=$val;
    }

    function add($key,$val){
        $this->_arr[$this->_arrName][] = array($key=>$val);
    }
}

// create an instance of the object
$jsonObj = new jsonOBJ("locations");

// add items using one of two methods
$jsonObj->push(json_decode("{\"location\":\"TestLoc1\"}",true)); // from a JSON String
$jsonObj->push(json_decode("{\"location\":\"TestLoc2\"}",true));

$jsonObj->add("location","TestLoc3"); // from key:val pairs

echo "<pre>" . print_r($jsonObj->toArray(),1) . "</pre>";
echo "<br />" . $jsonObj->toString();
?>

Uscita:

Array
(
    [locations] => Array
        (
            [0] => Array
                (
                    [location] => TestLoc1
                )

            [1] => Array
                (
                    [location] => TestLoc2
                )

            [2] => Array
                (
                    [location] => TestLoc3
                )

        )

)


{"locations":[{"location":"TestLoc1"},{"location":"TestLoc2"},{"location":"TestLoc3"}]}

Per iterare, converti in un oggetto normale:

$myObj = $jsonObj->toArray();

Poi:

foreach($myObj["locations"] as $locationObj){
    echo $locationObj["location"] ."<br />";
}

Uscite:

TestLoc1
TestLoc2
TestLoc3

Accesso diretto:

$location = $myObj["locations"][0]["location"];
$location = $myObj["locations"][1]["location"];

Un esempio pratico:

// return a JSON Object (jsonOBJ) from the rows
    function ParseRowsAsJSONObject($arrName, $rowRS){
        $jsonArr = new jsonOBJ($arrName); // name of the json array

        $rows = mysqli_num_rows($rowRS);
        if($rows > 0){
            while($rows > 0){
                $rd = mysqli_fetch_assoc($rowRS);
                $jsonArr->push($rd);
                $rows--;
            }
            mysqli_free_result($rowRS);
        }
        return $jsonArr->toArray();
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.