json_decode проблема с Joomla - PullRequest
       35

json_decode проблема с Joomla

0 голосов
/ 17 июня 2011

Я попытался найти, но не смог найти. Извините, если пропустили, если решение уже присутствует ...

код

$ json = «[{ "ID": "2", "значение": "1"}, { "идентификатор": "1", "значение": "1"}, { "идентификатор": "3", "значение" : ""}, { "идентификатор": "4", "значение": ""}, { "идентификатор": "5", "значение": ""}, { "ID: значение 6", " "" ":" "}, {" идентификатор ":" 7" , "значение": ""}, { "идентификатор": "8", "значение": ""}, { "идентификатор": "9",» значение ":" "}, {" идентификатор ":" 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;
    }
}  

1010 * 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; } } OUTPUT Предупреждение. В foreach () указан неверный аргумент /components/com_k2/views/item/view.html.php по линии 484 UPDATE: echo "JSON: $json<br/><br/>"; echo "DUMP: ".var_dump($myArray); OUTPUT

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: 

-> Использование true с json_decode не изменяет вывод

Stripslashes также не работал. Проверено $ item-> extra_fields - тип строки

Ответы [ 2 ]

0 голосов
/ 21 июня 2011

@ KilZone: Спасибо за ответ. Я не пробовал ваш код, но строка, которая извлекалась из базы данных, правильно отображалась в браузере, но когда я проверил ее, просмотрев исходный код, строка имела &quot; вместо двойной кавычки.

Так что я просто использовал приведенный ниже код для замены, и это решило мою проблему.

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

Спасибо всем за ответ.

0 голосов
/ 20 июня 2011

Это не имеет ничего общего ни с вашим кодом, ни с данными 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 на серверах, у которых есть похожие проблемы, которые вы описываете, и мне еще не приходилось сталкиваться с данными, которые вы не можете декодировать с помощью этой функции.

...