与joomla的json_decode问题

时间:2011-06-17 11:13:34

标签: php json joomla1.5 joomla-k2

我试过搜索但找不到。对不起如果已经错过了解决方案......

代码

  

$ json =   “[{ “ID”: “2”, “值”: “1”},{ “ID”: “1”, “值”: “1”},{ “ID”: “3”, “值” : “”},{ “ID”: “4”, “值”: “”},{ “ID”: “5”, “值”: “”},{ “ID”: “6”,“值“:” “},{” ID “:” 7" , “值”: “”},{ “ID”: “8”, “值”: “”},{ “ID”: “9”,”值 “:” “},{” ID “:” 10" , “值”: “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;
    }
}  

OUPUT

在数组键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;
    }
}  

输出

  

警告:为foreach()提供的参数无效   /components/com_k2/views/item/view.html.php   在第484行


更新:

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: 

- &GT;对json_decode使用true不会改变输出

Stripslashes也没有用。 已检查$ item-&gt; extra_fields是字符串类型

2 个答案:

答案 0 :(得分:0)

这与您的代码无关,也与您尝试解码的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数据,而且我还没有遇到过你无法用这个函数解码的数据。

答案 1 :(得分:0)

@KilZone:谢谢你的回复。我没有尝试过您的代码,但是从数据库中获取的字符串在浏览器中正确显示,但是当我通过查看源检查它时,字符串是&quot;而不是双引号。< / p>

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

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

感谢大家的回复。

相关问题