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::forEach
和 Array::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 对象的主要内容,如果未能解决你的问题,请参考以下文章