จะสร้างอาร์เรย์สำหรับ JSON โดยใช้ PHP ได้อย่างไร


126

จากโค้ด PHP ฉันต้องการสร้างอาร์เรย์ json:

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

ฉันจะทำเช่นนี้ได้อย่างไร?


คำตอบ:


154

คั้นมะนาว Easy peasy: 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);
?>

มีโพสต์โดยandyrusterholz at g-m-a-i-l dot c-o-mในหน้าดังกล่าวซึ่งสามารถจัดการอาร์เรย์ที่ซ้อนกันที่ซับซ้อนได้ (หากนั่นเป็นสิ่งที่คุณต้องการ)


2
แดงขวางคุณทันทีกับคำตอบนั้น =) ฉันรู้สึกตื่นเต้นกับคำถามง่าย ๆ =)
Calvin Froedge

2
ฉันมีรหัสนี้ในขณะที่ ($ row = mysql_fetch_assoc ($ query_insert)) {$ control = array ('regione' => $ row ["regione"], 'totale' => $ row ["prezzi"]); } พิมพ์ (json_encode (% control)); แต่เรียกใช้ {"regione": "Puglia", "totale": "5.15"} อีกครั้งไม่ใช่ [{.. }, {.. }]
Mimmo

2
เพิ่ม 1 สำหรับการอ้างอิงมะนาว :-)
ban-geoengineering

ฉันทำอย่างนั้น แต่การตอบสนองที่ฉันได้รับจากฟังก์ชัน var_dumb มีดังต่อไปนี้ ฉันจะกำจัดสตริง (59) ได้อย่างไร string (59) "[{" result ":" success "}, {" message ":" Data updated! "}]"
James Smith

115

ใช้เนทีฟของ PHP json_encodeดังนี้:

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

echo json_encode($arr);
?>

อัปเดต : เพื่อตอบคำถามของคุณในความคิดเห็น คุณทำเช่นนี้:

$named_array = array(
    "nome_array" => array(
        array(
            "foo" => "bar"
        ),
        array(
            "foo" => "baz"
        )
    )
);
echo json_encode($named_array);

2
ขอโทษนะ แต่ถ้าฉันต้องการ {"nome_array": [{"foo": "bar"}, {"foo": "baz"}]} ??
Mimmo

41

ง่าย ๆ : เพียงสร้างอาร์เรย์ PHP (ซ้อนกัน) และเรียกjson_encodeใช้ อาร์เรย์ตัวเลขแปลเป็นรายการ JSON ( []) อาร์เรย์ที่เชื่อมโยงและวัตถุ PHP แปลเป็นวัตถุ ( {}) ตัวอย่าง:

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

ให้คุณ:

[{"foo":"bar"},{"foo":"baz"}]

1
ขอโทษนะ แต่ถ้าฉันต้องการ {"nome_array": [{"foo": "bar"}, {"foo": "baz"}]} ??
Mimmo

2
อ่านโพสต์ของฉันอีกครั้ง หากคุณต้องการให้บางสิ่งบางอย่างแปลเป็นออบเจ็กต์ JSON ให้สร้างเป็น Associative array ใน PHP (โดยที่คีย์คือสตริง) หากคุณต้องการให้มันแปลเป็นรายการ JSON ให้ทำให้เป็นอาร์เรย์ธรรมดา (พร้อมด้วยคีย์จำนวนเต็มโดยปริยาย) ค่าของแต่ละองค์ประกอบอาร์เรย์สามารถเป็นอาร์เรย์ซึ่งเป็นสิ่งที่คุณต้องการ
tdammers

ขอบคุณสิ่งนี้ตอบคำถามของฉันด้วย
Shawn Wernig

ฉันทำอย่างนั้น แต่การตอบสนองที่ฉันได้รับจากฟังก์ชัน var_dumb มีดังต่อไปนี้ ฉันจะกำจัดสตริง (59) ได้อย่างไร string (59) "[{" result ":" success "}, {" message ":" Data updated! "}]"
James Smith

13

วิธีที่ดีที่สุดที่คุณควรทำทุกครั้งในการสร้าง json ใน php คือการแปลงค่าในอาร์เรย์ ASSOCIATIVE ก่อน

json_encode($associativeArray)หลังจากนั้นเพียงแค่ใช้การเข้ารหัส ฉันคิดว่าเป็นวิธีที่ดีที่สุดในการสร้าง json ใน php เพราะเมื่อใดก็ตามที่เราดึงผลลัพธ์จากแบบสอบถาม sql ใน php ส่วนใหญ่เราจะได้ค่าโดยใช้fetch_assocฟังก์ชันซึ่งจะส่งคืนอาร์เรย์ที่เชื่อมโยงหนึ่งรายการด้วย

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

... ฯลฯ

หลังจากนั้น.

json_encode($associativeArray);

3

สำหรับอาร์เรย์คุณสามารถใช้คำอธิบายประกอบสั้น ๆ :

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

echo json_encode($arr);

3

นั่นคือวิธีที่ฉันสามารถทำได้ด้วยความช่วยเหลือของวิธีแก้ปัญหาที่ได้รับจาก @tdammers ด้านล่าง บรรทัดต่อไปนี้จะถูกวางไว้ใน foreach loop

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

จากนั้นเข้ารหัสอาร์เรย์ด้วยฟังก์ชันเข้ารหัส json

json_encode(array('newvalue'=> $array), 200)

1

เพียงพิมพ์บรรทัดเดียวนี้จะให้อาร์เรย์ json

echo json_encode($array);

โดยปกติคุณใช้json_encodeอ่านข้อมูลจากแอป iOS หรือ Android ดังนั้นตรวจสอบให้แน่ใจว่าคุณไม่ได้สะท้อนสิ่งอื่นใดนอกจากอาร์เรย์ json ที่ถูกต้อง


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

คุณจะเพิ่มภาษาใหม่ในโหนดภาษาใน PHP แบบไดนามิกได้อย่างไร ขอบคุณ

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

ฉันสร้างคลาส jsonOBJ ที่หยาบและเรียบง่ายเพื่อใช้สำหรับโค้ดของฉัน PHP ไม่รวมฟังก์ชัน json เช่น JavaScript / Node do คุณต้องทำซ้ำให้แตกต่างออกไป แต่อาจเป็นประโยชน์

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

จะส่งออก:

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

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

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

        )

)


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

ในการทำซ้ำให้แปลงเป็นวัตถุปกติ:

$myObj = $jsonObj->toArray();

แล้ว:

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

ขาออก:

TestLoc1
TestLoc2
TestLoc3

เข้าถึงโดยตรง:

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

ตัวอย่างที่ใช้ได้จริง:

// 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();
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.