2016-09-09 11 views
0

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

"field": [[110468, "Octopus_vulgaris", "common octopus"... 

, а не

"field":[[110468,"Octopus_vulgaris","common octopus"... 

Это правильно? Если да, есть ли простой способ вывода JSON без лишних пробелов, и это по какой-либо причине (кроме читаемости) - плохая идея.

Я пытаюсь сделать некоторые вызовы API возвращением самого быстрого и краткого представления JSON, поэтому любые другие советы с благодарностью принимаются. Например, я вижу, что вызов вызывает from gluon.serializers import json - он получает повторное импортирование каждый раз, когда используется представление, или достаточно умен для python, чтобы использовать его только один раз. Я надеюсь на последнее.

ответ

1

Образец generic.json вызывает gluon.serializers.json, который в конечном итоге вызывает json.dumps из стандартной библиотеки Python. По умолчанию json.dumps вставляет пробелы после разделителей. Если вы не хотите пробелов, вы не сможете использовать представление generic.json как есть. Вместо этого вы можете сделать:

import json 
output = json.dumps(input, separators=(',', ':')) 

Если input содержит некоторые данные, которые не являются JSON сериализации, и вы хотите, чтобы воспользоваться преимуществами преобразования специальных типов данных, реализованного в gluon.serializers.json (т.е., дата и время объектов и различных web2py конкретных объектов), вам можно сделать следующее:

import json 
from gluon.serializers import custom_json 
output = json.dumps(input, separators=(',', ':'), default=custom_json) 

Используя выше, вы можете изменить вид generic.json, создать свой собственный JSON вид, или просто вернуть JSON непосредственно от контроллера.

Также не нужно беспокоиться о повторном импорте модулей в Python - интерпретатор загружает модуль только один раз.

+0

Спасибо за большой и быстрый ответ. Я вижу, что стандартный генератор json помещает response.headers ['Content-Type'] = 'text/json' * после * response.write(), что кажется немного странным. Идиотка, какая причина для этого. Это подразумевает, что ответ буферизуется где-то, и заголовки добавлены позже, что кажется немного обходным путем. – user2667066

+0

'response.write' не отправляет HTTP-запрос в браузер. Скорее, он просто пишет текст в объект 'response.body'' StringIO'. В шаблонах '{{= x}}' эквивалентен 'response.write (x)', как отмечено [здесь] (http://web2py.com/books/default/chapter/29/05/the-views #Виды). Ответ HTTP не отправляется в браузер до тех пор, пока не будет выполнен весь просмотр. – Anthony

 Смежные вопросы

  • Нет связанных вопросов^_^