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


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).


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

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"}]

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

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

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)

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.


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

¿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). "}";
    }

 ?>

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();
    }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.