Comment créer un tableau pour JSON en utilisant PHP?

126

À partir du code PHP, je veux créer un tableau json:

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

Comment puis-je faire ceci?

Mimmo
la source
1
duplication possible de Comment générer un fichier .json avec PHP?
Trilarion

Réponses:

154

Facile à presser au citron: 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);
?>

Il y a un article andyrusterholz at g-m-a-i-l dot c-o-msur la page susmentionnée qui peut également gérer des tableaux imbriqués complexes (si c'est votre truc).

David Titarenco
la source
2
Dang, mon pote, tu as été instantané sur cette réponse =). J'étais enthousiasmé par la question facile =)
Calvin Froedge
2
J'ai ce code while ($ row = mysql_fetch_assoc ($ query_insert)) {$ control = array ('regione' => $ row ["regione"], 'totale' => $ row ["prezzi"]); } print (json_encode (% contrôle)); mais retun {"regione": "Puglia", "totale": "5.15"} not [{..}, {..}]
Mimmo
2
Ajoutez 1 pour la référence citron. :-)
ban-geoengineering
Je l'ai fait mais la réponse que j'obtiens en utilisant la fonction var_dumb est la suivante. Comment puis-je me débarrasser de string (59)? string (59) "[{" result ":" success "}, {" message ":" Données mises à jour! "}]"
James Smith
115

Utilisez le natif de PHP json_encode, comme ceci:

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

echo json_encode($arr);
?>

Mise à jour : pour répondre à votre question dans le commentaire. Vous le faites comme ceci:

$named_array = array(
    "nome_array" => array(
        array(
            "foo" => "bar"
        ),
        array(
            "foo" => "baz"
        )
    )
);
echo json_encode($named_array);
Shef
la source
2
Excusez-moi mais si je veux {"nome_array": [{"foo": "bar"}, {"foo": "baz"}]} ??
Mimmo
41

Simple: créez simplement un tableau PHP (imbriqué) et appelez- json_encodele. Les tableaux numériques se traduisent en listes JSON ( []), les tableaux associatifs et les objets PHP se traduisent en objets ( {}). Exemple:

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

Vous donne:

[{"foo":"bar"},{"foo":"baz"}]
tdammers
la source
1
Excusez-moi mais si je veux {"nome_array": [{"foo": "bar"}, {"foo": "baz"}]} ??
Mimmo
2
Relisez mon message. Si vous voulez quelque chose à traduire en un objet JSON, faites-en un tableau associatif en PHP (où les clés sont des chaînes). Si vous voulez qu'il se traduise en une liste JSON, faites-en un tableau simple (avec des clés entières implicites). La valeur de chaque élément du tableau peut à son tour être un tableau, ce que vous voulez.
tdammers
Merci cela a également répondu à ma question.
Shawn Wernig
Je l'ai fait mais la réponse que j'obtiens en utilisant la fonction var_dumb est la suivante. Comment puis-je me débarrasser de string (59)? string (59) "[{" result ":" success "}, {" message ":" Données mises à jour! "}]"
James Smith
13

La meilleure façon de procéder à chaque fois pour créer json en php est de d'abord convertir les valeurs dans le tableau ASSOCIATIVE.

Après cela, encodez simplement en utilisant json_encode($associativeArray). Je pense que c'est le meilleur moyen de créer json en php parce que chaque fois que nous récupérons une requête SQL sous forme de résultat en php, la plupart du temps, nous obtenons des valeurs en utilisant fetch_assocfunction, qui retournent également un tableau associatif.

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

... etc.

Après ça.

json_encode($associativeArray);
Parveen Verma
la source
3

également pour le tableau, vous pouvez utiliser une annotation courte:

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

echo json_encode($arr);
Dwaskowski
la source
3

C'est ainsi que je peux faire avec l'aide de la solution donnée par @tdammers ci-dessous. La ligne suivante sera placée à l'intérieur de la boucle foreach.

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

Et puis encodez le tableau avec la fonction d'encodage json

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

Le simple fait de taper cette seule ligne vous donnerait un tableau json,

echo json_encode($array);

Normalement, vous utilisez json_encodepour lire les données d'une application iOS ou Android. alors assurez-vous de ne pas faire écho à autre chose que le tableau json précis.

theModerator713
la source
1
$json_data = '{ "Languages:" : [ "English", "Spanish" ] }';
$lang_data = json_decode($json_data);
var_dump($lang_data);
Matthieu
la source
Comment ajouteriez-vous dynamiquement une nouvelle langue au nœud des langues en PHP? Merci.
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
la source
0

J'ai créé une classe jsonOBJ simple et brute à utiliser pour mon code. PHP n'inclut pas les fonctions json comme le font JavaScript / Node. Vous devez itérer différemment, mais cela peut être 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();
?>

Sortira:

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

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

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

        )

)


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

Pour itérer, convertissez en un objet normal:

$myObj = $jsonObj->toArray();

Ensuite:

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

Les sorties:

TestLoc1
TestLoc2
TestLoc3

Accès direct:

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

Un exemple pratique:

// 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
la source