如何将JSON对象数组转换为PHP数组

5

我有一个JSON字符串,其中有一个对象,其中包含一个JSON数组和另一个对象。我想首先获取JSON数组,然后将其转换为PHP数组,将其他JSON对象转换为PHP变量。请告诉我如何做。我有stdclass,但我无法获得准确的数据。

JSON字符串:

{
    "data": [
    {
        "ques_name": "no",
        "ques_id": "1"
    }, {
        "ques_name": "yes",
        "ques_id": "2"
    }, {
        "ques_name": "no",
        "ques_id": "3"
    }, {
        "ques_name": "yes",
        "ques_id": "4"
    }, {
        "ques_name": "no",
        "ques_id": "5"
    }, {
        "ques_name": "yes",
        "ques_id": "6"
    }, {
        "ques_name": "no",
        "ques_id": "7"
    }
    ],
    "UserId": 163
}

我使用以下代码获取数组,但它给了我一个大小为14的数组,而实际上应该是7

    $params=$_GET['params'];
    $arr=array();
    $decode=json_decode($params);
    $arr=$decode->data;
    print_r($arr);

那个 print_r 到底会给你什么信息? - deceze
4个回答

12

json_decode($array) 将你的 JSON 对象转换为数组。

编辑:
你可以尝试使用 json_decode($array, true);。这样返回的对象将被转换为关联数组。

编辑2:使用我在编辑部分中的代码(json_decode($array, true);),我得到了以下数组(看起来对我来说是可以的):

Array
(
    [data] => Array
        (
            [0] => Array
                (
                    [ques_name] => no
                    [ques_id] => 1
                )

            [1] => Array
                (
                    [ques_name] => yes
                    [ques_id] => 2
                )

            [2] => Array
                (
                    [ques_name] => no
                    [ques_id] => 3
                )

            [3] => Array
                (
                    [ques_name] => yes
                    [ques_id] => 4
                )

            [4] => Array
                (
                    [ques_name] => no
                    [ques_id] => 5
                )

            [5] => Array
                (
                    [ques_name] => yes
                    [ques_id] => 6
                )

            [6] => Array
                (
                    [ques_name] => no
                    [ques_id] => 7
                )

        )

    [UserId] => 163
)

编辑3: 关于您询问如何获取数组的id/name部分,以下是一个小例子代码:

$jsonData= ''; // put here your json object
$arrayData = json_decode($jsonData, true);
if (isset($arrayData['data']))
{
foreach ($arrayData['data'] as $data)
{
echo 'id='.$data['ques_id'].', name='.$data['ques_name'].'<br>';
}
}

我知道,但它给我一个std类的对象。 - Tarun Sharma
我使用了以下代码来获取数组,但它给了我一个大小为14的数组,而实际上应该是7。 - Tarun Sharma
@TarunSharma 你在使用对象访问它时遇到了什么问题? - Veerendra
@TarunSharma 请检查我的编辑2并告诉我这是否符合您的期望。 - andrew
它只使用print_r打印,我如何访问包含id和name的第一个数组并将它们保存在数组中? - Tarun Sharma
@TarunSharma 循环遍历 $array['data'] 的结果。你会得到你想要的东西。 - andrew

0

有很多方法可以实现相同的功能,以下是其中一些:

$array =  (array) json_decode($xml_variable);

来自http://www.php.net/manual/zh/language.types.array.php

$array = json_decode(json_encode($xml_varible), true);

或者

function object_to_array(json_decode($xml_varible))
{
    if (is_array($data) || is_object($data))
    {
        $result = array();
        foreach ($data as $key => $value)
        {
            $result[$key] = object_to_array($value);
        }
        return $result;
    }
    return $data;
}

或者

function object_to_array(json_decode($xml_varible)) 
{
if ((! is_array($data)) and (! is_object($data))) return 'xxx'; //$data;

$result = array();

$data = (array) $data;
foreach ($data as $key => $value) {
    if (is_object($value)) $value = (array) $value;
    if (is_array($value)) 
    $result[$key] = object_to_array($value);
    else
        $result[$key] = $value;
}

return $result;
}

0

你也可以尝试:

array = get_object_vars(jsonData)

根据http://php.net/manual/en/function.get-object-vars.php的说明:

返回指定对象在作用域内定义的可访问非静态属性的关联数组。如果属性没有被赋值,它将以NULL值返回。


0
    $phpArray = array_map(function($value,$key){
        return ['key' => $key, 'value' => $value];
    },$jsonObject,array_keys($jsonObject));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接