繁体   English   中英

joomla的json_decode问题

[英]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:感谢您的答复。 我没有尝试过您的代码,但是从数据库中提取的字符串在浏览器中正确显示,但是当我通过查看源进行检查时,该字符串具有&quot; 而不是双引号。

所以我只用下面的代码替换了它,就解决了我的问题。

json_decode(str_replace("&quot;","\"",$item->extra_fields))

谢谢大家的答复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM