Как JSON декодировать элементы массива в JavaScript? - PullRequest
21 голосов
/ 08 октября 2008

У меня есть массив JavaScript, который, помимо прочего, содержит URL. Если я попытаюсь просто поместить URL-адрес на странице (массив находится в проекте, использующем API Yahoo! Maps), он отобразит URL-адрес в порядке.

Но если я попытаюсь сделать перенаправление или просто сделать «предупреждение» для элемента массива ссылок, я получу:

function () {return JSON.encode (this);}

Насколько я понимаю, это потому, что браузер создает JSON.encode при отображении страницы, поэтому ссылка отображается ОК. Я попробовал несколько методов, чтобы сделать его перенаправленным (это то, что я хочу сделать со ссылкой) правильно (включая использование 'eval'), но безуспешно.

После некоторых предложений я запустил eval('(' + jsonObject + ')'), но он все еще возвращает тот же вывод.

Так как это сделать?

Ответы [ 7 ]

40 голосов
/ 01 июля 2011
var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name === "John" );

См. API jQuery .

7 голосов
/ 15 марта 2011

Предположим, у вас есть массив в PHP как $ iniData с 5 полями. При использовании ajax -

echo json_encode($iniData);

В Javascript используйте следующее:

<script type="text/javascript">
    $(document).ready(function(){
        $.ajax({
            type: "GET",
            url: "ajaxCalls.php",
            data: "dataType=ini",
            success: function(msg)
            {
                var x = eval('(' + msg + ')');
                $('#allowed').html(x.allowed);              // these are the fields which you can now easily access..
                $('#completed').html(x.completed);
                $('#running').html(x.running);
                $('#expired').html(x.expired);
                $('#balance').html(x.balance);
            }
        });
    });
</script>
5 голосов
/ 08 октября 2008

Если вы получаете этот текст в предупреждении:

function(){return JSON.encode(this);}

при попытке оповещения (myArray [i]) существует несколько возможностей:

  • myArray [i] - это функция (скорее всего)
  • myArray [i] является литеральной строкой "function () {return JSON.encode (this);}"
  • myArray [i] имеет метод .toString (), который возвращает эту функцию или эту строку. Это наименее вероятно из трех.

Самый простой способ определить это - проверить typeof (myArray [i]).

2 голосов
/ 08 октября 2008
eval('(' + jsonObject + ')')
1 голос
/ 10 октября 2008

Если элемент объекта, который вы получаете, является функцией, вы можете попробовать это:

var url = myArray[i]();
1 голос
/ 08 октября 2008

JSON-декодирование в JavaScript - это просто eval (), если вы доверяете строке или более безопасному коду, который вы можете найти на http://json.org, если вы этого не сделаете.

После этого у вас будет структура данных JavaScript, которую вы сможете просмотреть для нужных вам данных.

0 голосов
/ 25 марта 2013

Я декодирую JSON следующим образом:

eval( 'var from_json_object = ' + my_json_str + ';' );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...