В чем разница между объектами Python и JSON? - PullRequest
9 голосов
/ 07 апреля 2011

На первый взгляд кажется, что python изначально использует json. Единственное исключение, о котором я могу подумать, это тот факт, что json может хранить функции js.

Вот моя проблема: Мне нужно передать JSON в файл Python через терминал.
Почему я должен или не должен просто использовать eval ()?

Ответы [ 2 ]

24 голосов
/ 07 апреля 2011

Нет, Python не использует JSON изначально.Этот материал, который вы считаете JSON, фактически представляет собой словарь, один из множества видов объектов в Python.(Простой) синтаксис для создания словаря в Python довольно близок к JSON, но он является случайным.Так как вы можете создать словарь следующим образом:

a = {'a' : 2, 'b' : 3}

, вы также можете создать его следующим образом:

a = dict([('a', 2), ('b', 3)]);

Итак, чем же так похожи синтаксисы?Хорошо, синтаксис JSON вдохновлен синтаксисом JavaScript для массивов.Вполне вероятно, что синтаксис JavaScript также вдохновил способ написания словарей Python или наоборот.Но никогда не допускайте, чтобы эти три синтаксиса - дикты JavaScript, JSON и Python - были одинаковыми или взаимозаменяемыми.

Учитывая это, почему бы вам не использовать eval() для преобразования JSON в словарь?Во-первых, поскольку eval() может делать что-либо в Python - например, выход из программы, удаление файла, изменение некоторых внутренних данных и т. Д. И т. Д. Следовательно, используя eval(), вы можете сделать себя уязвимыми для внедрения кода , в зависимости от того, как вы его используете.Кроме того, использование eval() для преобразования JSON в dict предполагает, что синтаксис обоих одинаков - что не всегда верно;даже если синтаксис был идентичен, он не может быть в будущем.Наконец, есть гораздо лучший и более практичный способ анализа JSON: модуль json:

>>> import json
>>> json.loads('{"a":1}')
{'a': 1}

Используйте его для анализа вашего JSON.

Удачи!

18 голосов
/ 07 апреля 2011

JSON не имеет объектов как таковых и не может хранить функции JavaScript. Его синтаксис может показаться похожим на литералы JavaScript, но попытка использовать его как таковое все время не вызовет ничего, кроме боли.

И не нужно использовать eval(); и JavaScript, и Python имеют в своем распоряжении JSON-анализаторы и сериализаторы.

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