2016-09-09 2 views
0

を削除するには、JSONにPythonのオブジェクトを変更するデフォルトのJSONビューは変数間の空白文字を含めるように思われるので、場合web2pyのJSONのリターンが、どのようにだけチェックする

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

ではなく

すなわち、余分な空白を持っていますか
"field":[[110468,"Octopus_vulgaris","common octopus"... 

そうですか?もしそうなら、余分なスペースなしでJSONを出力する簡単な方法があります。これは何らかの理由で(読みやすさ以外の)悪い考えです。

私はいくつかのAPI呼び出しを、最も速くて最も簡潔なJSON表現を返すようにしようとしているので、他のヒントは喜んで受け入れられました。たとえば、私はビューの呼び出しfrom gluon.serializers import jsonを参照してください - それは、ビューが使用されるたびに再インポートされるか、それを一度だけ使用するのに十分なほど賢いですか?私は後者を望んでいる。

答えて

1

generic.jsonビューでは、が呼び出され、最終的にPython標準ライブラリからjson.dumpsが呼び出されます。既定では、json.dumpsはセパレータの後にスペースを挿入します。スペースを必要としない場合は、generic.jsonビューをそのまま使用することはできません。あなたの代わりに行うことができます。

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

inputは、シリアライズJSONではありません、あなたはgluon.serializers.json(すなわち、DateTimeオブジェクトと様々な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}}'は[ここ](http://web2py.com/books/default/chapter/29/05/the-views)のように 'response.write(x)'と同等です。 #ビュー)。 HTTP応答は、ビュー全体が実行されるまでブラウザに送信されません。 – Anthony

関連する問題