[英]json_decode problem with joomla
我尝试搜索但找不到。 抱歉,如果错过了解决方案,那么...
码
$ json ='[{“ id”:“ 2”,“ value”:“ 1”},{“ id”:“ 1”,“ value”:“ 1”},{“ id”:“ 3”, “ value”:“”},{“ id”:“ 4”,“ value”:“”},{“ id”:“ 5”,“ value”:“”},{“ id”:“ 6” ,“ value”:“”},{“ id”:“ 7”,“ value”:“”},{“ id”:“ 8”,“ value”:“”},{“ id”:“ 9 “,” value“:”“},{” id“:” 10“,” value“:” 1“}]'';
$myArray = json_decode($json);
foreach ($myArray as $key => $v) {
if ($v->id == 10 && ($v->value == 0 || $v->value == 1)) {
echo 'Value found at array key ' . $key;
}
}
在数组键9处找到的值
但这仅在我用单引号静态指定$ json值时有效...但是在我的joomla项目中,使用类变量来获取值,因此当我使用$json=$item->extra_fields
而不是给出时$json
的静态字符串不起作用......
码
$json=$item->extra_fields;
$myArray = json_decode($json);
foreach ($myArray as $key => $v) {
if ($v->id == 10 && ($v->value == 0 || $v->value == 1)) {
echo 'Value found at array key ' . $key;
}
}
输出值
警告:第484行的/components/com_k2/views/item/view.html.php中为foreach()提供的参数无效
更新:
echo "JSON: $json<br/><br/>";
echo "DUMP: ".var_dump($myArray);
JSON: [{"id":"2","value":"1"},{"id":"1","value":"1"},{"id":"3","value":""},
{"id":"4","value":""},{"id":"5","value":""},{"id":"6","value":"<br \/>"},
{"id":"7","value":"<br \/>"},{"id":"8","value":"<br \/>"},{"id":"9","value":"<br \/>"},
{"id":"10","value":"1"}]
NULL DUMP:
->对json_decode使用true不会改变输出
Stripslashes也没有用。 已检查$ item-> extra_fields是字符串类型
这与您的代码无关,也与您尝试解码的JSON数据无关,但是与PHP配置错误有关(或故意这样做)。 我已经多次遇到过这个问题,但是简单地说, 该功能已被禁用 。 请注意 ,该功能不起作用,而不是实际禁用,但结果相同,返回值为空。
最好的解决方案是使用替代代码(方法)对JSON数据进行解码,可以在PHP网站上找到该数据:
function json_decode($json)
{
$comment = false;
$out = '$x=';
for ($i=0; $i<strlen($json); $i++)
{
if (!$comment)
{
if (($json[$i] == '{') || ($json[$i] == '[')) $out .= ' array(';
else if (($json[$i] == '}') || ($json[$i] == ']')) $out .= ')';
else if ($json[$i] == ':') $out .= '=>';
else $out .= $json[$i];
}
else $out .= $json[$i];
if ($json[$i] == '"' && $json[($i-1)]!="\\") $comment = !$comment;
}
eval($out . ';');
return $x;
}
这段代码并不漂亮,但是可以解决问题。 我不时使用此代码,然后在遇到您描述的类似问题的服务器上解码JSON数据,而我还没有遇到使用此功能无法解码的数据。
@KilZone:感谢您的答复。 我没有尝试过您的代码,但是从数据库中提取的字符串在浏览器中正确显示,但是当我通过查看源进行检查时,该字符串具有"
而不是双引号。
所以我只用下面的代码替换了它,就解决了我的问题。
json_decode(str_replace(""","\"",$item->extra_fields))
谢谢大家的答复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.