PythonのJSONモジュールのヒント

PythonのJSONモジュールは、典型的には、など、データ・シーケンスのために使用されます

def get_user_info(user_id):
    res = {"user_id": 190013234,"nick": "havana"}
    json_str = json.dumps(res)
    return json_str


あなたが中国語の文字が含まれているデータをシリアル化したい場合でも、これは次のようになります

import json
res = {"user_id": 190027134, "nick": "愚蠢的萝卜"}
print(json.dumps(res))

# {"nick": "\u611a\u8822\u7684\u841d\u535c", "user_id": 190027134}


ソリューション:json.dumpsにパラメータを追加します。()内のensure_ascii=False

import json
res = {"user_id": 190027134, "nick": "愚蠢的萝卜"}
print(json.dumps(res))

# {"nick": "愚蠢的萝卜", "user_id": 190027134}


それはパラメータを追加できるように、それがフォーマットされ、そこに問題があり、JSONの構造は非常に複雑である場合、結果の出力が混乱になり、明らかではないが、

import json
res = {"user_id": 190027134, "nick": "愚蠢的萝卜"}
print(json.dumps(res))

# {
    "nick": "愚蠢的萝卜", 
    "user_id": 190027134
}


Pythonのdatetime.datetimeのタイプの内部データのシーケンスは、エラーがシリアライズされる場合

import datetime

res = {"user_id": 190027134, "nick": "愚蠢的萝卜", "reg_ts": datetime.datetime.now()}
print(json.dumps(res, ensure_ascii=False, indent=4))

#TypeError: datetime.datetime(2019, 11, 3, 19, 8, 45, 987000) is not JSON serializable


解決策ではなく、ネイティブjsonencoderのカスタムjsonencoderを使用することです

class DatetimeEncoder(json.JSONEncoder):

    def default(self, obj):
        if isinstance(obj, datetime.datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(obj, datetime.date):
            return obj.strftime('%Y-%m-%d')
        else:
            return json.JSONEncoder.default(self, obj)


res = {"user_id": 190027134, "nick": "愚蠢的萝卜", "reg_ts": datetime.datetime.now(), "last_login_date": datetime.date.today()}
print(json.dumps(res, ensure_ascii=False, indent=4, cls=DatetimeEncoder))

# {
    "nick": "愚蠢的萝卜", 
    "user_id": 190027134, 
    "reg_ts": "2019-11-03 20:09:55", 
    "last_login_date": "2019-11-03"
}

おすすめ

転載: www.cnblogs.com/zzliu/p/11788823.html