¿Cómo crear una matriz para JSON usando PHP?

126

Desde el código PHP quiero crear una matriz json:

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

¿Cómo puedo hacer esto?

Mimmo
fuente
1
posible duplicado de ¿Cómo generar un archivo .json con PHP?
Trilarion

Respuestas:

154

Exprimidor fácil de limón: 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);
?>

Hay una publicación andyrusterholz at g-m-a-i-l dot c-o-men la página mencionada que también puede manejar matrices anidadas complejas (si eso es lo suyo).

David Titarenco
fuente
2
Dang, amigo, fuiste instantáneo en esa respuesta =). Estaba entusiasmado con la pregunta fácil =)
Calvin Froedge
2
Tengo este código while ($ row = mysql_fetch_assoc ($ query_insert)) {$ control = array ('regione' => $ row ["regione"], 'totale' => $ row ["prezzi"]); } print (json_encode (% control)); pero retun {"regione": "Puglia", "totale": "5.15"} no [{..}, {..}]
Mimmo
2
Agregue 1 para la referencia de limón. :-)
prohibición de geoingeniería
Lo hice pero la respuesta que obtengo usando la función var_dumb es la siguiente. ¿Cómo puedo deshacerme de la cuerda (59)? string (59) "[{" result ":" success "}, {" message ":" Data updated! "}]"
James Smith
115

Use el nativo de PHP json_encode, así:

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

echo json_encode($arr);
?>

Actualización : para responder a su pregunta en el comentario. Lo haces así:

$named_array = array(
    "nome_array" => array(
        array(
            "foo" => "bar"
        ),
        array(
            "foo" => "baz"
        )
    )
);
echo json_encode($named_array);
Shef
fuente
2
Disculpe pero si quiero {"nome_array": [{"foo": "bar"}, {"foo": "baz"}]} ??
Mimmo
41

Simple: simplemente cree una matriz PHP (anidada) e instálela json_encode. Las matrices numéricas se traducen en listas JSON ( []), las matrices asociativas y los objetos PHP se traducen en objetos ( {}). Ejemplo:

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

Te dio:

[{"foo":"bar"},{"foo":"baz"}]
tdammers
fuente
1
Disculpe pero si quiero {"nome_array": [{"foo": "bar"}, {"foo": "baz"}]} ??
Mimmo
2
Lee mi publicación nuevamente. Si desea que algo se traduzca en un objeto JSON, conviértalo en una matriz asociativa en PHP (donde las claves son cadenas). Si desea que se traduzca en una lista JSON, conviértalo en una matriz simple (con claves enteras implícitas). El valor de cada elemento de matriz puede ser una matriz, que es lo que desea.
tdammers
Gracias esto respondió mi pregunta también.
Shawn Wernig
Lo hice pero la respuesta que obtengo usando la función var_dumb es la siguiente. ¿Cómo puedo deshacerme de la cuerda (59)? string (59) "[{" result ":" success "}, {" message ":" Data updated! "}]"
James Smith
13

La mejor manera de ir cada vez para crear json en php es convertir primero los valores en una matriz ASSOCIATIVE.

Después de eso simplemente codifica usando json_encode($associativeArray). Creo que es la mejor manera de crear json en php porque cada vez que estamos obteniendo resultados de la consulta sql en php, la mayoría de las veces tenemos valores usando la fetch_assocfunción, que también devuelve una matriz asociativa.

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

... etc.

Después de esto.

json_encode($associativeArray);
Parveen Verma
fuente
3

también para array puedes usar anotaciones cortas:

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

echo json_encode($arr);
dwaskowski
fuente
3

Así es como puedo hacerlo con la ayuda de la solución dada por @tdammers a continuación. La siguiente línea se colocará dentro del bucle foreach.

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

Y luego codifique la matriz con la función de codificación json

json_encode(array('newvalue'=> $array), 200)
iZeeshan
fuente
1

Simplemente escribiendo esta sola línea le daría una matriz json,

echo json_encode($array);

Normalmente se usa json_encodepara leer datos de una aplicación ios o android. así que asegúrese de no hacer eco de otra cosa que no sea la matriz json precisa.

theModerator713
fuente
1
$json_data = '{ "Languages:" : [ "English", "Spanish" ] }';
$lang_data = json_decode($json_data);
var_dump($lang_data);
Mateo
fuente
¿Cómo agregaría dinámicamente un nuevo idioma al nodo de idiomas en PHP? Gracias.
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). "}";
    }

 ?>
iamasp
fuente
0

Creé una clase jsonOBJ simple y cruda para usar para mi código. PHP no incluye funciones json como JavaScript / Node do. Debe iterar de manera diferente, pero puede ser útil.

<?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();
?>

Saldrá:

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

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

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

        )

)


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

Para iterar, convertir a un objeto normal:

$myObj = $jsonObj->toArray();

Luego:

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

Salidas:

TestLoc1
TestLoc2
TestLoc3

Acceso directo:

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

Un ejemplo práctico:

// 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();
    }
Jeffrey Meyer
fuente