我现在觉得很蠢。以下代码应该输出'如果你可以打印这个文本,那你很整洁!',但事实并非如此。有什么想法吗?
<?php
$a = (Array) json_decode("{\"406\":\"If you can get this text to print, you're neat!\"}");
// dump($a);
echo $a[406]."\n";
echo $a["406"]."\n";
echo $a['"406"']."\n";
echo $a["'406'"]."\n";
$a = Array(406=>'Sanity check: this works, why don\'t any of the previous accessors work?');
// dump($a);
echo $a[406]."\n";
function dump($a) {
foreach ($a as $k => $v) {
echo "$k=>$v\n";
}
}
?>
答案 0 :(得分:2)
您的原始示例返回了一个对象,因为返回类型的第二个可选参数具有默认值FALSE
,或者返回一个对象。这就是你对待它的方式......
$a = json_decode("{\"406\":\"If you can get this text to print, you're neat!\"}", FALSE);
echo $a->{"406"}; // If you can get this text to print, you're neat!
稍微调整一下,你可以创建一个数组......
$a = json_decode("{\"406\":\"If you can get this text to print, you're neat!\"}", TRUE);
echo $a["406"]; // If you can get this text to print, you're neat!
...您可以将$a
引用为您最初尝试的数组。注意当您尝试键入强制转换原始对象时发生的情况。这是您创建的原始数组的var_dump,后面是使用可选TRUE
参数生成的数组。
array(1) { ["406"]=> string(47) "If you can get this text to print, you're neat!" }
array(1) { [406]=> string(47) "If you can get this text to print, you're neat!" }
当您从对象中键入数组键时,您是否看到它是如何向数组键添加引号的?这就是为什么你无法返回正确的值;因为数组键已经改变了。
答案 1 :(得分:1)
这对我有用:
$a = json_decode("{\"406\":\"If you can get this text to print, you're neat!\"}", true);
我在json_decode中添加了另一个参数。
答案 2 :(得分:0)
您使用的是json对象,而不是数组。
json对象:
{"keyname":"keyvalue"}
Json数组:
["value1","value2"]
由于它是一个对象,您可以这样访问它。
$json=json_decode("{'keyname':'keyvalue'}";
$keyname=$json->keyname;