我有一个json字符串i,其中一个对象有一个json数组&另一个对象我想先将json数组转换成php array&其他json对象进入php变量。请告诉我如何做到这一点。我有stdclass但我无法获得准确的数据。
Json String
{
"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);
答案 0 :(得分:6)
json_decode($array)
会将您的json对象转换为数组。
修改强>
你可以试试json_decode($array, true);
。这样返回的对象将被转换为关联数组。
Edit2 :在编辑部分(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
)
Edit3 :关于如何获取数组的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>'
}
}
答案 1 :(得分:0)
有很多方法可以达到相同的效果,其中一些是
$array = (array) json_decode($xml_variable);
来自http://www.php.net/manual/en/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;
}
答案 2 :(得分:0)
您也可以尝试:
array = get_object_vars(jsonData)
根据http://php.net/manual/en/function.get-object-vars.php:
返回范围内指定对象的已定义对象可访问非静态属性的关联数组。如果尚未为属性分配值,则将返回NULL值。