Преобразование JSONobj в Obj не работает? - PullRequest
0 голосов
/ 08 февраля 2011

Я пытаюсь преобразовать объект JSON в "нормальный" объект, используя следующие ...

        var slaobj = eval('('+s+')');

s, являющиеся JSON.однако, это, кажется, не работает (это .length возвращается как неопределенный).Что я делаю не так?

Ответы [ 5 ]

3 голосов
/ 08 февраля 2011

Это `.length 'возвращается как неопределенное

У него не обязательно будет свойство length, если только у него нет массива или другого объекта. Например:

var json = '{"foo": "Value of foo"}';
var obj = eval('(' + json + ')');
alert(obj.foo); // alerts "value of foo"
alert(obj.length); // alerts "undefined", there's no `length` in `obj`

Живой пример


Не по теме : использование eval для десериализации текста JSON может быть проблемой безопасности, если только вы не можете однозначно доверять источнику текста JSON (например, это ваш собственный сервер и вы подключение через SSL), поскольку eval не анализирует JSON, он анализирует и выполняет код JavaScript. (Добавление скобок не очень помогает.) Вы можете получить альтернативы использованию eval на странице 1010 * Github Дугласа Крокфорда (он является изобретателем JSON). Последнее, что я проверил, есть три варианта, два из которых не используют eval вообще; смотрите README внизу страницы для подробностей.

1 голос
/ 08 февраля 2011

Объекты не все имеют свойства ".length".Литерал объекта, такой как:

{ 'foo': 100, 'bar': 'Abraham Lincoln' }

описывает объект, у которого нет свойства ".length".

JavaScript Массив объекты имеют свойства ".length" из-закак работает язык исполнения.Но простой объект в JavaScript имеет такое свойство, только если вы поместите его туда.

0 голосов
/ 08 февраля 2011

http://www.jsonlint.com/ этот сайт имеет хорошую проверку строк JSON, которую вы должны всегда иметь в своем распоряжении.Хорошо проверять строку JSON, когда она действительно большая.

Также не используйте eval () для получения объекта JSON. Посетите http://www.json.org/ у него действительно хорошие ориентиры, проверьте его.

Сегодня существует много библиотек JavaScript, которые предлагают JSON API.Я предлагаю вам один из них для безопасности.

http://api.jquery.com/jQuery.getJSON/

http://developer.yahoo.com/yui/json/

http://dojotoolkit.org/reference-guide/dojo/_base/json.html

0 голосов
/ 08 февраля 2011

Как вы получаете объект?

Я бы сказал, что должно быть что-то еще не так - вы уверены, что объект JSON 's' был возвращен правильно? JSON.org

Чтобы преобразовать текст JSON в объект, вы можете использовать функцию eval (). eval () вызывает компилятор JavaScript. Поскольку JSON является правильным подмножеством JavaScript, компилятор правильно проанализирует текст и создаст объектную структуру. Текст должен быть заключен в скобки, чтобы избежать путаницы в синтаксисе JavaScript.

var myObject = eval('(' + myJSONtext + ')');
0 голосов
/ 08 февраля 2011

Обновление: Ах, я вижу, для этого нужны круглые скобки.Крысы.Удалена первая часть.

Но это остается в силе:

Не используйте eval!

eval () - опасная функция, который выполняет код, который передается с привилегиями вызывающей стороны.Если вы запускаете eval () со строкой, на которую может повлиять злоумышленник, вы можете в конечном итоге запустить вредоносный код на компьютере пользователя с разрешениями вашей веб-страницы / расширения.Что еще более важно, сторонний код может видеть область, в которой был вызван eval (), что может привести к возможным атакам, в которых подобная функция не восприимчива.

Источник: Mozilla JavaScript Ссылка: eval ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...