9

PythonNoneをjsonで空の文字列としてエンコードする方法を教えてください。以下は、のデフォルトの動作ですjson.dumps

>>> import json
>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'

jsonエンコーダーメソッドを上書きする必要がありますか、それとも他の方法がありますか?

入力データは上記の例のように単純ではなく、リクエストごとに異なるデータ構造に変更される可能性があります。データ構造を変更するための関数を書くのは難しい。

4

3 に答える 3

10

エンコードするオブジェクトでは、. の代わりに空の文字列を使用しますNone

以下は、ネストされた一連の辞書を調べて、すべてのNone値をに変更する未テストの関数です''。リストとタプルのサポートの追加は、読者の課題として残されています。:)

import copy

def scrub(x):
    ret = copy.deepcopy(x)
    # Handle dictionaries. Scrub all values
    if isinstance(x, dict):
        for k,v in ret.items():
            ret[k] = scrub(v)
    # Handle None
    if x == None:
        ret = ''
    # Finished scrubbing
    return ret
于 2012-07-10T10:04:32.157 に答える
3

エンコードしたいデータを加工してNones を空の文字列に置き換えたほうがよいでしょう。結局のところ、それはあなたが望むものです。

于 2012-07-10T10:05:05.203 に答える
3

リストとタプルも処理するわずかに改善されたバージョンを次に示します。

def scrub(x):
    # Converts None to empty string
    ret = copy.deepcopy(x)
    # Handle dictionaries, lits & tuples. Scrub all values
    if isinstance(x, dict):
        for k, v in ret.items():
            ret[k] = scrub(v)
    if isinstance(x, (list, tuple)):
        for k, v in enumerate(ret):
            ret[k] = scrub(v)
    # Handle None
    if x is None:
        ret = ''
    # Finished scrubbing
    return ret

jsonschmeaモジュール使用時に使用しました。型を扱えないようでNone、 throw: jsonschema.exceptions.ValidationError: None is not of type u'string'. したがって、これで問題は解決します。

于 2016-05-06T19:07:24.593 に答える