首页 > 解决方案 > 将 json 转换为多维 PHP 数组

问题描述

我将以下 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}]","description" :""}

在后端,我收到它作为 Laravel 请求,如下所示:

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

它返回以下预期结果

数组('key' => 'levels', 'value' => '[{role_id:1, access_level_id:3}, {role_id:2, access_level_id:1}, {role_id:3, access_level_id:2}]', '描述' => NULL, )

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

数组('key' => 'levels', 'value' => array(array('role_id'=>1, 'access_level_id'=>3), array('role_id'=>2, 'access_level_id'=>1 ), array('role_id'=>3, 'access_level_id'=>2) ) 'description' => NULL, )

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

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

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

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

感谢您的帮助

标签: phparraysjsonlaravel-7jsondecoder

解决方案


您的问题是该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] => 
)

3v4l.org 上的演示


推荐阅读