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

Posted

技术标签:

【中文标题】如何使用 PHP 为 JSON 创建一个数组?【英文标题】:How to create an array for JSON using PHP? 【发布时间】:2011-10-08 01:35:50 【问题描述】:

我想从 php 代码创建一个 json 数组:

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

我该怎么做?

【问题讨论】:

How to generate .json file with PHP?的可能重复 【参考方案1】:

我创建了一个粗略而简单的 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 />";

输出:

TestLoc1TestLoc2TestLoc3

直接访问:

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

【讨论】:

【参考方案2】:

这就是我在下面@tdammers 提供的解决方案的帮助下能够做到的。 以下行将放在 foreach 循环中。

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

然后用json编码函数对数组进行编码

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

【讨论】:

【参考方案3】:

只需输入这一行就会给你一个 json 数组,

echo json_encode($array);

通常您使用json_encodeiosandroid 应用程序读取数据。所以请确保除了准确的 json 数组之外不要回显任何其他内容。

【讨论】:

【参考方案4】:

对于数组也可以使用简短的注释:

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

echo json_encode($arr);

【讨论】:

【参考方案5】:

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

之后,只需使用json_encode($associativeArray) 进行简单编码。我认为这是在 php 中创建 json 的最佳方式,因为每当我们在 php 中获取结果形式的 sql 查询时,大多数时候我们使用fetch_assoc 函数获取值,该函数也返回一个关联数组。

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

... 等等

在那之后。

json_encode($associativeArray);

【讨论】:

【参考方案6】:

使用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);

【讨论】:

对不起,如果我想要 "nome_array": ["foo":"bar","foo":"baz"] ??【参考方案7】:

简单:只需创建一个(嵌套的)PHP 数组并在其上调用json_encode。数字数组转换为 JSON 列表 ([]),关联数组和 PHP 对象转换为对象 ()。示例:

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

给你:

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

【讨论】:

对不起,如果我想要 "nome_array": ["foo":"bar","foo":"baz"] ?? 再次阅读我的帖子。如果您想将某些内容转换为 JSON 对象,请在 PHP 中将其设为关联数组(其中键是字符串)。如果您希望它转换为 JSON 列表,请将其设为普通数组(带有隐式整数键)。每个数组元素的值又可以是一个数组,这就是你想要的。【参考方案8】:

简单的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 在上述页面上有一个帖子,它也可以处理复杂的嵌套数组(如果你喜欢的话)。

【讨论】:

以上是关于如何使用 PHP 为 JSON 创建一个数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 将 JSON 字符串数据转换为数组?

如何将php json数组转换为yaml

如何将 json 编码的 PHP 数组转换为 Javascript 中的数组? [复制]

如何在php中将json数组值声明为变量

PHP/jQuery - 如何将多维 PHP 数组转换为 JSON 字符串?

如何在PHP中将对象转换为特定格式的数组