-1

以下 JSON 结构:

{
    "details":
    [
        {"specific_exercise.distance" : "14",},
        {"specific_exercise.avg_pace" : "7.5"}
    ]
}

使用 json_decode() 时转换为此:

stdClass Object
(
    [details] => Array
        (
            [0] => stdClass Object
                (
                    [specific_exercise.distance] => 14
                )

            [1] => stdClass Object
                (
                    [specific_exercise.avg_pace] => 7.5
                )
        )
)

相反,我想将其转换为:

stdClass Object
(
    [details] => Array
        (
            [specific_exercise.distance] => 14
            [specific_exercise.avg_pace] => 7.5
        )

)

从 json_decode() 结构转换为更有效的 PHP 结构的最佳方法是什么?

4

2 回答 2

2

例如,如果您可以控制它,更改您的 JSON 可能会是更好的解决方案

{
    "details":
    {
        "specific_exercise.distance" : "14",
        "specific_exercise.avg_pace" : "7.5"
    }
}

编辑:

然后你可以使用这个方法:

function parseJsonFormat($json)
{
    $json_object = json_decode($json);
    $details_result = array();
    foreach($json_object['details'] as $detail)
    {
         $details_result = array_merge($details_result, get_object_vars($detail));
    }
    $json_object['details'] = $details_result;
    return $json_object;
}

您可以进一步修改该方法以适用于每个数组,而不仅仅是详细信息键。

于 2013-02-10T17:44:18.903 回答
2

要将多个关联子数组拼凑在一起,请使用:

 call_user_func_array("array_merge", (array)$subarray)

在您的情况下,哪里$subarray意味着details您将结果分配回去。

仅适用于数组,不适用于对象,因此最好先json_decode使用第二个参数进行指示。

于 2013-02-10T17:55:45.970 回答