Wie erstelle ich ein Array für JSON mit PHP?

126

Aus PHP-Code möchte ich ein JSON-Array erstellen:

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

Wie kann ich das machen?

Mimmo
quelle
1
Mögliches Duplikat von Wie erstelle ich eine .json-Datei mit PHP?
Trilarion

Antworten:

154

Easy Peasy Lemon Squeezy: 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);
?>

Auf andyrusterholz at g-m-a-i-l dot c-o-mder oben genannten Seite gibt es einen Beitrag von, der auch komplexe verschachtelte Arrays verarbeiten kann (wenn das Ihr Ding ist).

David Titarenco
quelle
2
Dang, Homie, du warst sofort bei dieser Antwort =). Ich war begeistert von der einfachen Frage =)
Calvin Froedge
2
Ich habe diesen Code während ($ row = mysql_fetch_assoc ($ query_insert)) {$ control = array ('regione' => $ row ["regione"], 'totale' => $ row ["prezzi"]); } print (json_encode (% control)); aber retun {"regione": "Puglia", "totale": "5.15"} nicht [{..}, {..}]
Mimmo
2
Fügen Sie 1 als Zitronenreferenz hinzu. :-)
Ban-Geoengineering
Ich habe das getan, aber die Antwort, die ich mit der Funktion var_dumb erhalte, ist die folgende. Wie kann ich den String (59) loswerden? Zeichenfolge (59) "[{" Ergebnis ":" Erfolg "}, {" Nachricht ":" Daten aktualisiert! "}]"
James Smith
115

Verwenden Sie das native PHP json_encodewie folgt:

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

echo json_encode($arr);
?>

Update : Um Ihre Frage im Kommentar zu beantworten. Du machst es so:

$named_array = array(
    "nome_array" => array(
        array(
            "foo" => "bar"
        ),
        array(
            "foo" => "baz"
        )
    )
);
echo json_encode($named_array);
Shef
quelle
2
Entschuldigung, aber wenn ich will {"nome_array": [{"foo": "bar"}, {"foo": "baz"}]} ??
Mimmo
41

Einfach: Erstellen Sie einfach ein (verschachteltes) PHP-Array und rufen Sie json_encodees auf. Numerische Arrays werden in JSON-Listen ( []) übersetzt, assoziative Arrays und PHP-Objekte in Objekte ( {}). Beispiel:

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

Gibt Ihnen:

[{"foo":"bar"},{"foo":"baz"}]
tdammers
quelle
1
Entschuldigung, aber wenn ich will {"nome_array": [{"foo": "bar"}, {"foo": "baz"}]} ??
Mimmo
2
Lies meinen Beitrag noch einmal. Wenn Sie möchten, dass etwas in ein JSON-Objekt übersetzt wird, machen Sie es in PHP zu einem assoziativen Array (wobei die Schlüssel Zeichenfolgen sind). Wenn Sie möchten, dass es in eine JSON-Liste übersetzt wird, machen Sie es zu einem einfachen Array (mit impliziten Ganzzahlschlüsseln). Der Wert jedes Array-Elements kann wiederum ein Array sein, was Sie möchten.
tdammers
Danke das hat auch meine Frage beantwortet.
Shawn Wernig
Ich habe das getan, aber die Antwort, die ich mit der Funktion var_dumb erhalte, ist die folgende. Wie kann ich den String (59) loswerden? Zeichenfolge (59) "[{" Ergebnis ":" Erfolg "}, {" Nachricht ":" Daten aktualisiert! "}]"
James Smith
13

Der beste Weg, den Sie jedes Mal gehen sollten, um json in PHP zu erstellen, besteht darin, zuerst Werte in das ASSOCIATIVE-Array zu konvertieren.

Danach einfach mit codieren json_encode($associativeArray). Ich denke, es ist der beste Weg, um json in PHP zu erstellen, denn wann immer wir Ergebnisse aus SQL-Abfragen in PHP abrufen, haben wir die meiste Zeit Werte mit fetch_assocFunktion erhalten, die auch ein assoziatives Array zurückgeben.

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

... etc.

Nachdem.

json_encode($associativeArray);
Parveen Verma
quelle
3

Auch für Arrays können Sie kurze Anmerkungen verwenden:

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

echo json_encode($arr);
Dwaskowski
quelle
3

So kann ich mit Hilfe der von @tdammers unten angegebenen Lösung vorgehen. Die folgende Zeile wird in jede Schleife eingefügt.

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

Und dann codieren Sie das Array mit der JSON-Codierungsfunktion

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

Wenn Sie nur diese einzelne Zeile eingeben, erhalten Sie ein JSON-Array.

echo json_encode($array);

Normalerweise json_encodelesen Sie Daten von einer iOS- oder Android-App. Stellen Sie daher sicher, dass Sie nur das genaue JSON-Array wiedergeben.

theModerator713
quelle
1
$json_data = '{ "Languages:" : [ "English", "Spanish" ] }';
$lang_data = json_decode($json_data);
var_dump($lang_data);
Matthew
quelle
Wie würden Sie dem Sprachknoten in PHP dynamisch eine neue Sprache hinzufügen? Vielen Dank.
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
quelle
0

Ich habe eine grobe und einfache jsonOBJ-Klasse erstellt, die ich für meinen Code verwenden kann. PHP enthält keine JSON-Funktionen wie JavaScript / Node. Sie müssen anders iterieren, können aber hilfreich sein.

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

Wird ausgegeben:

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

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

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

        )

)


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

Konvertieren Sie zum Iterieren in ein normales Objekt:

$myObj = $jsonObj->toArray();

Dann:

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

Ausgänge:

TestLoc1
TestLoc2
TestLoc3

Direkter Zugriff:

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

Ein praktisches Beispiel:

// 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
quelle