Выполнение JSON через оценку Python ()?

  1. Добавьте файлы в папку с именем LocalPackages рядом с вашим решением (это не нужно называть так, но соответствующим образом настройте xml в следующем шаге)
  2. Создайте файл с именем NuGet.config рядом с файлом вашего решения со следующим содержимым

    <?xml version="1.0" encoding="utf-8"?>
      <configuration>
        <packageSources>
          <add key="LocalPackages" value="./LocalPackages" />
        </packageSources>
        <activePackageSource>
          <!-- this tells that all of them are active -->
          <add key="All" value="(Aggregate source)" />
        </activePackageSource>
     </configuration>
    
  3. Если решение открыто в Visual Studio, закройте его, а затем снова откройте.

Теперь ваши пакеты должны появиться в браузере или быть установлены с помощью Install-Package

20
задан Ben Blank 5 July 2009 в 02:01
поделиться

3 ответа

Если вам удобно, что ваш скрипт какое-то время работает нормально, а затем случайно дает сбой в каком-то непонятном пограничном случае, я бы выбрал eval.

Если важно, чтобы ваш код был надежный, я бы потратил время, чтобы добавить simplejson. Вам не нужна часть C для ускорения, поэтому на самом деле не должно быть сложно выгрузить несколько файлов .py в какой-либо каталог.

В качестве примера того, что может вас укусить, JSON использует Unicode и возвращает simplejson Unicode, тогда как eval возвращает str:

>>> simplejson.loads('{"a":1, "b":2}')
{u'a': 1, u'b': 2}
>>> eval('{"a":1, "b":2}')
{'a': 1, 'b': 2}

Edit: лучший пример того, где eval () ведет себя по-другому:

>>> simplejson.loads('{"X": "\uabcd"}')
{u'X': u'\uabcd'}
>>> eval('{"X": "\uabcd"}')
{'X': '\\uabcd'}
>>> simplejson.loads('{"X": "\uabcd"}') == eval('{"X": "\uabcd"}')
False

Edit 2: видел сегодня еще одну проблему, на которую сегодня указал SilentGhost: eval не обрабатывает true -> True, false -> Ложь, ноль -> Нет правильно.

>>> simplejson.loads('[false, true, null]')
[False, True, None]
>>> eval('[false, true, null]')
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'false' is not defined
>>> 
29
ответ дан 29 November 2019 в 23:45
поделиться

eval Использование JSON немного похоже на попытку запустить XML через компилятор C ++.

eval предназначен для оценки кода Python. Хотя есть некоторые синтаксические сходства, JSON не является кодом Python . Черт возьми, это не только не код Python , это не код для начала. Поэтому, даже если вам это сойдет с рук для вашего варианта использования, я бы сказал, что концептуально это плохая идея. Python - это яблоко, JSON - газировка со вкусом апельсина.

0
ответ дан 29 November 2019 в 23:45
поделиться

Суть лучших практик заключается в том, что в большинстве случаев игнорировать их - плохая идея. На вашем месте я бы использовал парсер для синтаксического анализа JSON в Python. Попробуйте simplejson , это было очень просто для синтаксического анализа JSON, когда я последний раз пробовал его, и он утверждает, что совместим с Python 2.4.

Я не согласен с тем, что не стоит доверять Google. Я бы не стал им доверять, но я бы проверил данные, которые вы от них получаете. Причина, по которой я бы на самом деле использовал парсер JSON, прямо в вашем вопросе:

Мои собственные (краткие) исследования показывают, что JSON является полностью допустимым Python, за исключением escape-последовательности "/", которую GC не делает Похоже, что не создается.

Почему вы думаете, что Google Code никогда не создаст подобную escape-последовательность?

Синтаксический анализ - это решаемая проблема, если вы используете правильные инструменты. Если вы попытаетесь использовать такие ярлыки, вы в конечном итоге столкнетесь с неверными предположениями или сделаете что-то вроде попытки собрать синтаксический анализатор с регулярными выражениями и логической логикой, когда синтаксический анализатор уже существует для выбранного вами языка.

11
ответ дан 29 November 2019 в 23:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: