В последнее время я активно программирую в Google App Engine.К моему удивлению, при использовании модуля simplejson код неожиданно начал вести себя странно.В то время как один экземпляр приложения будет печатать (используя self.response.out.write(serialized)
, где serialized
- строка словаря), JSON отформатирован как:
{"error": "Your user key does not exist"}
, рабочий экземпляр выведет строку словаря JSON в виде:
{'error': 'Your user key does not exist'}
Очевидно, что последний является неправильным, поскольку он использует одинарные кавычки вместо двойных кавычек.(и, следовательно, JSONLint или почти любой анализ JSON умирает при его разборе)
Самая смешная часть?При печати на консоль с использованием logging.info('')
оба печатают JSON правильно.Я закомментировал почти все в рабочем коде, за исключением кода печати для тестирования, и проблема остается.
Что происходит ?!Есть ли где-нибудь магический переключатель, который заменяет все красивые двойные кавычки одинарными кавычками при выводе на экран?!
Добавлено для развлечения в Stack Overflowers:
Приведенный ниже код, выполняемый на моем экземпляре GAE, а также на общедоступном сервере, также создает JSON с одинарными кавычками, что делает этот простейший пример возможным.
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
import simplejson as json
class MainHandler(webapp.RequestHandler):
def get(self):
testing = { "testing" : True, "why?" : 123 }
serialized = json.dumps(testing)
self.response.headers['Content-Type'] = 'application/json'
self.response.out.write(testing)
def main():
application = webapp.WSGIApplication([('/', MainHandler)],
debug=True)
util.run_wsgi_app(application)
if __name__ == '__main__':
main()