如何使用PHP为JSON创建数组?


Answers:


154

轻松榨柠檬汁:http ://www.php.net/manual/zh/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 2011年

2
我有这段代码while($ 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作为柠檬参考。:-)
禁止地球工程

我做到了,但是使用var_dumb函数得到的响应如下。如何摆脱字符串(59)?string(59)“ [{” result“:” success“},{” message“:”数据已更新!“}]”
James Smith

115

使用PHP的native 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对象,请使其成为PHP中的关联数组(键为字符串)。如果希望将其转换为JSON列表,请使其成为一个纯数组(带有隐式整数键)。每个数组元素的值又可以是一个数组,这就是您想要的。
tdammers

谢谢这也回答了我的问题。
肖恩·韦尼格

我做到了,但是使用var_dumb函数得到的响应如下。如何摆脱字符串(59)?string(59)“ [{{result”:“ success”},{“ message”:“数据已更新!”}]“
James Smith Smith

13

每次在php中创建json时最好的方法是首先转换ASSOCIATIVE数组中的值。

之后,只需使用即可编码json_encode($associativeArray)。我认为这是在php中创建json的最佳方法,因为每当大多数时候我们都在php中从sql查询结果表单时,我们都会使用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循环内。

$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的language节点中动态添加新语言?谢谢。

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不像JavaScript / Node一样包含json函数。您必须进行不同的迭代,但可能会有所帮助。

<?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();
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.