Bagaimana cara membuat array untuk JSON menggunakan PHP?

126

Dari kode PHP saya ingin membuat json array:

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

Bagaimana saya bisa melakukan ini?

Mimmo
sumber
1
kemungkinan duplikat dari Bagaimana cara menghasilkan file .json dengan PHP?
Trilarion

Jawaban:

154

Jeruk lemon yang mudah dicampuri: 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);
?>

Ada posting oleh andyrusterholz at g-m-a-i-l dot c-o-mpada halaman tersebut yang juga dapat menangani array bersarang yang kompleks (jika itu yang Anda maksud).

David Titarenco
sumber
2
Sial, homie, Anda langsung menjawabnya =). Saya senang dengan pertanyaan mudah =)
Calvin Froedge
2
Saya memiliki kode ini sementara ($ row = mysql_fetch_assoc ($ query_insert)) {$ control = array ('regione' => $ row ["regione"], 'totale' => $ row ["prezzi"]); } print (json_encode (% control)); tapi retun {"regione": "Puglia", "totale": "5.15"} bukan [{..}, {..}]
Mimmo
2
Tambahkan 1 untuk referensi lemon. :-)
larangan geoengineering
Saya melakukan itu tetapi respons yang saya dapatkan menggunakan fungsi var_dumb adalah sebagai berikut. Bagaimana saya bisa menyingkirkan string (59)? string (59) "[{" result ":" success "}, {" message ":" Data diperbarui! "}]"
James Smith
115

Gunakan PHP asli json_encode, seperti ini:

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

echo json_encode($arr);
?>

Pembaruan : Untuk menjawab pertanyaan Anda di komentar. Anda melakukannya seperti ini:

$named_array = array(
    "nome_array" => array(
        array(
            "foo" => "bar"
        ),
        array(
            "foo" => "baz"
        )
    )
);
echo json_encode($named_array);
Shef
sumber
2
Maaf, tetapi jika saya ingin {"nome_array": [{"foo": "bar"}, {"foo": "baz"}]} ??
Mimmo
41

Sederhana: Cukup buat array PHP (bersarang) dan panggil json_encodedi atasnya. Array numerik diterjemahkan ke dalam daftar JSON ( []), array asosiatif dan objek PHP diterjemahkan menjadi objek ( {}). Contoh:

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

Memberi anda:

[{"foo":"bar"},{"foo":"baz"}]
tammmer
sumber
1
Maaf, tetapi jika saya ingin {"nome_array": [{"foo": "bar"}, {"foo": "baz"}]} ??
Mimmo
2
Baca posting saya lagi. Jika Anda menginginkan sesuatu untuk diterjemahkan menjadi objek JSON, buatlah array asosiatif dalam PHP (di mana kuncinya adalah string). Jika Anda ingin menerjemahkannya ke dalam daftar JSON, buatlah array sederhana (dengan kunci integer implisit). Nilai dari setiap elemen array pada gilirannya dapat berupa array, yang merupakan apa yang Anda inginkan.
tdammers
Terima kasih, ini menjawab pertanyaan saya juga.
Shawn Wernig
Saya melakukan itu tetapi respons yang saya dapatkan menggunakan fungsi var_dumb adalah sebagai berikut. Bagaimana saya bisa menyingkirkan string (59)? string (59) "[{" result ":" success "}, {" message ":" Data diperbarui! "}]"
James Smith
13

Cara terbaik yang harus Anda lakukan setiap kali membuat json di php adalah dengan pertama-tama mengonversi nilai dalam array ASSOCIATIVE.

Setelah itu cukup cukup encode menggunakan json_encode($associativeArray). Saya pikir itu adalah cara terbaik untuk membuat json di php karena setiap kali kita mengambil kueri hasil sql di php sebagian besar waktu kita mendapat nilai menggunakan fetch_assocfungsi, yang juga mengembalikan satu array asosiatif.

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

... dll.

Setelah itu.

json_encode($associativeArray);
Parveen Verma
sumber
3

juga untuk array Anda dapat menggunakan penjelasan singkat:

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

echo json_encode($arr);
dwaskowski
sumber
3

Begitulah cara saya dapat melakukan dengan bantuan solusi yang diberikan oleh @tdammers di bawah ini. Baris berikut akan ditempatkan di dalam foreach loop.

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

Dan kemudian mengkodekan array dengan fungsi enkode json

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

Cukup mengetik satu baris ini akan memberi Anda json array,

echo json_encode($array);

Biasanya Anda gunakan json_encodeuntuk membaca data dari aplikasi iOS atau Android. jadi pastikan Anda tidak menggemakan hal lain selain json array yang akurat.

theModerator713
sumber
1
$json_data = '{ "Languages:" : [ "English", "Spanish" ] }';
$lang_data = json_decode($json_data);
var_dump($lang_data);
Matius
sumber
Bagaimana Anda secara dinamis menambahkan bahasa baru ke simpul bahasa di PHP? Terima kasih.
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
sumber
0

Saya membuat kelas jsonOBJ mentah dan sederhana untuk digunakan untuk kode saya. PHP tidak termasuk fungsi json seperti JavaScript / Node do. Anda harus mengulang secara berbeda, tetapi mungkin bisa membantu.

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

Akan menghasilkan:

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

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

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

        )

)


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

Untuk beralih, konversikan ke objek normal:

$myObj = $jsonObj->toArray();

Kemudian:

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

Output:

TestLoc1
TestLoc2
TestLoc3

Akses langsung:

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

Contoh praktis:

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