在 MySQL 上,我有 JSON 值
{"length":1847,"data":[0,0,0,0,-46,37]}
在 PHP 上我需要在数组中对“data”对象进行字符串处理,所以我尝试了:
$json = $row['wave'];
$json_array = json_decode($json);
$json_wave = $json_array["data"];
它给了我internal server error 500
,所以我尝试了:
var_dump(json_decode($json));
我得到的是:
object(stdClass)#7 (5) {
["length"]=>
int(1847)
["data"]=>
array(3694) {
[0]=>
int(0)
[1]=>
int(0)
[2]=>
int(0)
[3]=>
int(0)
[4]=>
int(-46)
[5]=>
int(37)
}
}
我需要输出这个字符串0,0,0,0,-46,37
,为什么我的代码不起作用?
答案 0 :(得分:4)
如果你想要将JSON解码为数组,你应该使用带有附加参数的json_decode函数($ assoc as true):
$json_array = json_decode($json, true);
您可以在此处查看文档:{{3}}
答案 1 :(得分:2)
json_decode()默认返回一个Object而不是一个数组。如果要解码数组中的 JSON字符串,json_decode会接受第二个参数boolean
。
如果第二个参数是true
,json_decode()将以数组的形式返回值。
所以你的代码看起来像这样,
$json = $row['wave'];
$json_array = json_decode($json,true);
$json_wave = $json_array["data"];
第二个参数默认值为false
。
要从Object获取数据,您可以像这样访问它,
print_r($json_array->data);
答案 2 :(得分:2)
因此,假设您希望最后一个变量成为您需要的字符串
$json_array = json_decode($json);
$json_wave = implode(',', $json_array->data);
因为您的JSON包含一个对象,所以PHP默认将它放入一个对象中。这就是var_dump
表示stdClass
答案 3 :(得分:0)
您的var_dump显示该行被解码为对象,因此您无法使用数组表示法访问其字段。
更改
$json_wave = $json_array["data"];
要
$json_wave = $json_array->data;
或者,如果您想使用数组而不是对象,可以将第二个参数设置为json_decode,如下所示:
$json_array = json_decode($json, true);
答案 4 :(得分:0)
它不起作用,因为您正在尝试将对象视为数组。 json_decode
第二个参数将json_string转换为对象。使用json_decode($json, true)
来说'嘿,将我的json字符串转换为数组,而不是对象'。另一方面,您可以使用$json_array->data
代替$json_array["data"]
。
答案 5 :(得分:0)
试试这个:
$json = '{"length":1847,"data":[0,0,0,0,-46,37]}';
$a = json_decode($json);
print_r($a->data);
变量json_decode
中的$a
之后的值存储在对象表单中,您无法获得像$a['data']
这样的对象值,因此您必须以这种方式使用$a->data