将 json 转换为多维 PHP 数组

Posted

技术标签:

【中文标题】将 json 转换为多维 PHP 数组【英文标题】:Convert a json to multi-dimensional PHP array 【发布时间】:2020-10-23 09:12:58 【问题描述】:

我将以下 json 发送到我的 API 端点

"key":"levels","value":"[role_id:1, access_level_id:3, role_id:2, access_level_id:1, role_id:3, access_level_id:2]", "描述":""

在后端,我将其作为 Laravel 请求接收,如下所示:

public function functionName(Request $request)
    $req=$request->all();
    Log::debug($req['value']);
    return;

它返回以下预期结果

数组 ( 'key' => '级别', '值' => '[role_id:1, access_level_id:3, role_id:2, access_level_id:1, role_id:3, access_level_id:2]', '描述' => NULL, )

但我还需要将“值”转换为数组。这样我就可以拥有一个多维 php 数组。所以我希望得到类似的东西

数组 ( 'key' => '级别', '值' => 数组( 数组('role_id'=>1,'access_level_id'=>3), 数组('role_id'=>2,'access_level_id'=>1), 数组('role_id'=>3,'access_level_id'=>2) ) '描述' => NULL, )

但是在我的 Laravel 方法中,我会执行以下操作:

public function share_doc(Request $request)
        $req=$request->all();
        Log::debug(json_decode($req['value'],true));
        return;
    

试图将作为“值”接收的 json 转换为 PHP 数组,它什么也不返回 - 即没有值,没有数组,没有字符串。什么都没有。

所以,我在这里的困难是如何将作为“值”从请求接收到的整个 json 字符串转换为 PHP 数组,以便我可以使用 PHP 遍历项目

感谢您的帮助

【问题讨论】:

为什么没有引用 role_id 和 access_level_id ? "key":"levels","value":["role_id":1, "access_level_id":3, "role_id":2, "access_level_id":1, "role_id":3, "access_level_id":2],"description":"" 有效。您对正在创建的 JSON 有任何控制权吗? @TorbjörnStabo 非常感谢。 json已修改,问题已解决 【参考方案1】:

您的问题是 value 元素不是有效的 JSON,因为键没有被引用。对于您提供的示例数据,您可以使用 preg_replace 修复它,然后 json_decode 更改值:

$x['value'] = json_decode(preg_replace('/(\w+)(?=:)/', '"$1"', $x['value']), true);
print_r($x);

输出:

Array
(
    [key] => levels
    [value] => Array
        (
            [0] => Array
                (
                    [role_id] => 1
                    [access_level_id] => 3
                )
            [1] => Array
                (
                    [role_id] => 2
                    [access_level_id] => 1
                )
            [2] => Array
                (
                    [role_id] => 3
                    [access_level_id] => 2
                )
        )
    [description] => 
)

Demo on 3v4l.org

【讨论】:

谢谢。引用值中的键解决了问题 @Josh 从 cmets 中听起来好像您已经设法在 JSON 的源头解决了这个问题,这是一个更好的修复它的地方。希望这对有类似问题的其他用户有用。

以上是关于将 json 转换为多维 PHP 数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将多维数组转换为json对象[关闭]

PHP:将多维数组转换为简单数组

PHP递归函数将多维数组转换为xml

如何将多维PHP数组转换为html表

php PHP array_flatten()函数。将多维数组转换为一维数组。

将多维json数组转换成python字典成dataframe