我试过搜索但找不到。对不起如果已经错过了解决方案......
代码
$ 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;
}
}
在数组键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是字符串类型
答案 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:谢谢你的回复。我没有尝试过您的代码,但是从数据库中获取的字符串在浏览器中正确显示,但是当我通过查看源检查它时,字符串是"
而不是双引号。< / p>
所以我只是使用下面的代码替换,它解决了我的问题。
json_decode(str_replace(""","\"",$item->extra_fields))
感谢大家的回复。