PHP 数组到 Json 对象

Posted

技术标签:

【中文标题】PHP 数组到 Json 对象【英文标题】:PHP Array to Json Object 【发布时间】:2016-05-08 01:59:46 【问题描述】:

我需要将 php 数组转换为 JSON,但我没有得到我期望的结果。 我希望它是一个可以使用数字索引轻松导航的对象。 这是一个示例代码:

$json = array();
$ip = "192.168.0.1";
$port = "2016";
array_push($json, ["ip" => $ip, "port" => $port]);
$json = json_encode($json, JSON_PRETTY_PRINT);
// ----- json_decode($json)["ip"] should be "192.168.0.1" ----
echo $json;

这就是我得到的

[  
   [  
      "ip" => "192.168.0.1",
      "port" => "2016"
   ]
]

但我想得到一个对象而不是数组:

  
   "0":   
      "ip": "192.168.0.1",
      "port": "2016"
   

【问题讨论】:

为什么想让外层数组变成 JSON 对象?如果它只有数字键,那么数组会在稍小的空间内提供相同的信息,并且在 JS 方面更容易使用(例如,您可以使用 Array::forEachArray::map)。 @00Davo 谢谢,因为我认为当它是一个对象时更容易处理它hhh,我主要在服务器端(PHP)上使用它:)赞成 【参考方案1】:

你想json_encode($json, JSON_FORCE_OBJECT)

JSON_FORCE_OBJECT 标志,顾名思义,强制 json 输出成为一个对象,即使它通常会被表示为一个数组。

您还可以取消使用array_push 以获得更简洁的代码:

$json[] = ['ip' => $ip, 'port' => $port];

【讨论】:

谢谢,但这是我得到的: "0": "0": "ip => 192.168.0.1", "1": "port => 2016" 您的字符串在array_push 中的位置不正确。试试array_push($json, ["ip" => $ip, "port" => $port]); JSON_FORCE_OBJECT 解决我的问题,谢谢【参考方案2】:

只使用

$response=array();
$response["0"]=array("ip"     => "192.168.0.1",
                     "port"   => "2016");
$json=json_encode($response,JSON_FORCE_OBJECT);

【讨论】:

谢谢,还没有测试,但@jbafford 更快:),顺便说一句【参考方案3】:

要获取包含对象的数组,您可以创建 stdClass() 而不是为内部项目创建数组,如下所示;

<?PHP

    $json = array();
    $itemObject = new stdClass();
    $itemObject->ip = "192.168.0.1";
    $itemObject->port = 2016;

    array_push($json, $itemObject);
    $json = json_encode($json, JSON_PRETTY_PRINT);
    echo $json;

?>

一个工作示例http://ideone.com/1QUOm6

【讨论】:

【参考方案4】:
$ip   = "192.168.0.1";
$port = "2016";
$json = array("response" => array("ip" => $ip, "port" => $port)); 
//IF U NEED AS JSON OBJECT
$json = [array("ip" => $ip, "port" => $port)]; //IF U NEED AS JSON ARRAY
$json = json_encode($json);
echo $json;

【讨论】:

【参考方案5】:

为了得到一个对象而不仅仅是一个 json 字符串试试:

$json = json_decode(json_encode($yourArray));

如果你也想对嵌套数组进行 jsonise:

$json =json_decode(json_encode($yourArray, JSON_FORCE_OBJECT));

【讨论】:

【参考方案6】:

以防万一您想访问您的客观化 json 整个数据或特定键值:

PHP 端

 $json = json_encode($yourdata, JSON_FORCE_OBJECT);

JS 端

 var json = <?=$json?>;
 console.log(json);            // ip:"192.168.0.1", port:"2016"
 console.log(json['ip']);      // 192.168.0.1
 console.log(json['port']);    // 2016

【讨论】:

以上是关于PHP 数组到 Json 对象的主要内容,如果未能解决你的问题,请参考以下文章

PHP传递通过AJAX传递JSON对象数组到前台,前台解析,遍历JSON

PHP - 递归数组到对象?

PHP JSON 或数组到 XML

php数组转json对象并保留数字索引

Elasticsearch-PHP 处理JSON数组和对象

php 对象json 数组互转