Как JSON декодировать элементы массива в JavaScript?

#javascript #json

Вопрос:

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

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

функция(){возвращает JSON.кодировать(это);}

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

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

Так как же это делается ?

Комментарии:

1. Непонятно, что вы имеете в виду… можете ли вы опубликовать больше примеров кода? Фактическое содержимое массива и вызов перенаправления были бы очень полезны.

Ответ №1:

 var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name === "John" );
 

См. API jQuery.

Ответ №2:

Предположим, у вас есть массив в 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>
 

Ответ №3:

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

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

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

  • myArray[i] — это функция (скорее всего)
  • myArray[i] — это буквальная строка «функция(){возвращает JSON.кодировать(это);}»
  • У myArray[i] есть метод .toString (), который возвращает эту функцию или эту строку. Это наименее вероятно из трех.

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

Комментарии:

1. Я сомневаюсь, что это буквальная строка. Скорее всего, это функция. Я попытался «оценить(‘(‘ JSONObject ‘)’)», но все равно он возвращает тот же результат, что и раньше…

2. Да, можно было бы представить, что передача функции в eval() вызовет метод toString этой функции, возвращая строку, которая будет возвращена обратно в саму функцию. Так что в этом есть смысл.

Ответ №4:

 eval('('   jsonObject   ')')
 

Комментарии:

1. eval-это безопасный способ декодирования данных JSON только в том случае, если вы на 100% доверяете своему источнику 😀

2. Это не может быть оценено- > {«код»:200,»язык»:»en-de»,»текст»:[«строка 1″,»строка 2»]}

Ответ №5:

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

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

Комментарии:

1. Как я уже говорил, я попытался «оценить» элемент ссылки, но затем он вернул «неопределенный». Данные в массиве поступают в виде синтаксического анализа XML, как вы думаете, может ли это иметь какое-то отношение к этому ?

Ответ №6:

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

 var url = myArray[i]();
 

Ответ №7:

Я декодирую JSON таким образом:

 eval( 'var from_json_object = '   my_json_str   ';' );