gpt4 book ai didi

PHP > json_encode ,强制创建一个数组,即使它只有一个元素

转载 作者:可可西里 更新时间:2023-11-01 13:27:58 25 4
gpt4 key购买 nike

我通过 POST 从外部服务获取 xml,并在 json 中返回 xml

这是xml的一个例子

<xml>
<item>
<user>utente1</user>
<psw>A722C63DB8EC8625AF6CF71CB8C2D939</psw>
<code>A722C63DB8EC8625AF6CF71CB8C2D939</code>
</item>
<item>
<user>utente2</user>
<psw>A722C63DB8EC8625AF6CF71CB8C2D939</psw>
<code>A722C63DB8EC8625AF6CF71CB8C2D939</code>
</item>
</xml>

通过这个过程,我将 xml 转换为 json

php

$xml = simplexml_load_string($getPostData);
$json = json_encode($xml);

json 结果

{
"item": [
{
"user": "utente1",
"psw": "A722C63DB8EC8625AF6CF71CB8C2D939",
"code": "25BBDCD06C32D477F7FA1C3E4A91B032"
},
{
"user": "utente2",
"psw": "A722C63DB8EC8625AF6CF71CB8C2D939",
"code": "25BBDCD06C32D477F7FA1C3E4A91B032"
}
]
}

这是正确的。但是当xml只有一项时会出现问题

 <xml>
<item>
<user>utente1</user>
<psw>A722C63DB8EC8625AF6CF71CB8C2D939</psw>
<code>A722C63DB8EC8625AF6CF71CB8C2D939</code>
</item>
</xml>

在这种情况下,json 是

{
"item": {
"user": "utente1",
"psw": "A722C63DB8EC8625AF6CF71CB8C2D939",
"code": "25BBDCD06C32D477F7FA1C3E4A91B032"
}
}

item 在这种情况下是一个对象,而不是只有一个元素的数组。

我希望是这样

{
"item": [
{
"user": "utente1",
"psw": "A722C63DB8EC8625AF6CF71CB8C2D939",
"code": "25BBDCD06C32D477F7FA1C3E4A91B032"
}
]
}

我阅读了 json_encode 的文档和 various json constants ,但我找不到强制执行此过程的选项。我继续进行手动控制还是可以自动进行?谢谢


更新

我的解决方案

//$getPostData = "<xml><item><user>utente1</user><psw>A722C63DB8EC8625AF6CF71CB8C2D939</psw><code>25BBDCD06C32D477F7FA1C3E4A91B032</code></item><item><user>utente1</user><psw>A722C63DB8EC8625AF6CF71CB8C2D939</psw><code>25BBDCD06C32D477F7FA1C3E4A91B032</code></item></xml>";   

$getPostData = "<xml><item><user>utente1</user><psw>A722C63DB8EC8625AF6CF71CB8C2D939</psw><code>25BBDCD06C32D477F7FA1C3E4A91B032</code></item></xml>";

$xml = simplexml_load_string($getPostData);

$json = json_encode($xml);
$jsonCheck = json_decode($json);

$numItem = sizeof($jsonCheck->item);

if($numItem == 1){
$newJson = new stdClass();
$newJson->item = array();
$newJson->item[0]["user"] = $jsonCheck->item->user;
$newJson->item[0]["psw"] = $jsonCheck->item->psw;
$newJson->item[0]["code"] = $jsonCheck->item->code;
$newJson = json_encode($newJson);
echo $newJson;
}else{
echo $json;
}

最佳答案

如果这是整个 XML 的结构而不仅仅是来自更大的东西的片段,您可以使用更少的代码将它变成一个数组或数组和对象的混合:

$xml = simplexml_load_string($getPostData);

$array = array('item' => array());
foreach ($xml->item as $item) {
$array['item'][] = (object)(array)$item;
}

echo(json_encode($array));

无论有多少<item>,这都会按预期产生您在问题中描述的输出。元素出现在 XML 中。

删除 (object)来自 foreach() 中的代码得到<item>元素转换为数组而不是 stdClass对象。

关于PHP > json_encode ,强制创建一个数组,即使它只有一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27960573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com