代码之家  ›  专栏  ›  技术社区  ›  hasherBaba

为什么json.dumps()和json.loads()生成unicode字符串?[关闭]

  •  0
  • hasherBaba  · 技术社区  · 6 年前

    'created_at':datetime.datetime(2018,5,25,13,35,11),'tweet': “RT@KKRiders:Mavi将在预选赛2中投出第一个球。萨哈在 罢工。走吧!\ n \n srhvkkr teesravar kkrhaitaiyaar“,‘id’: 100000737131764736,“序列”:1

    这是我的字符串,我需要它在JSON中。

    def myconverter(o):
        if isinstance(o, datetime.datetime):
            return o.__str__()
    messageRead = json.dumps(message.value, default = myconverter)
    messageRead = json.loads(messageRead)
    print messageRead
    print type(messageRead)
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   markus-hinsche JohnnyHK    6 年前

    您的JSON无效。要解决此问题,请首先修改字符串:

    • datetime.datetime(2018, 5, 25, 13, 35, 11) 不是有效的字符串。可以将其作为字符串读取并在加载后解析。
    • 去除 \n
    • 代替 ' 具有 " (python支持 ,但JSON不支持Afaik)
    • \' 在JSON中也不允许

    “created_at”:“datetime.datetime(2018,5,25,13,35,11)”, “tweet”:“rt@kkkriders:mavi投出第一个预选赛2球。 萨哈罢工了。走吧!#srhvkkr teesravar kkrhaitayaar,“身份证”: 100000737131764736,“序列”:1

    要检查JSON是否有效,请使用: https://jsonlint.com/

    请参阅这里的JSON RFC了解JSON支持哪些功能: https://tools.ietf.org/html/rfc7159

        2
  •  1
  •   Artem Nepo    6 年前

    就是这样 json.loads 在Python2.7工作。 最简单的方法是切换到 python3 . 如果你想坚持使用python2.7,你可以使用对象对挂钩。

    import datetime
    import json
    
    
    message = {
       'created_at': datetime.datetime(2018, 5, 25, 13, 35, 11),
       'tweet': "RT @KKRiders: Mavi to bowl the first ball of #Qualifier2. Saha on strike. Let's go!\n\n#SRHvKKR #TeesraVaar #KKRHaiTaiyaar",
       'id': 1000007371131764736,
       'sequence': 1}
    def myconverter(o):
        if isinstance(o, datetime.datetime):
            return o.__str__()
    
    def object_pairs_hook(pairs):
        new_pairs = []
        for key, value in pairs:
            if isinstance(value, unicode):
                try:
                    value = datetime.datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
                except:
                    value = value.encode('utf-8')
            if isinstance(key, unicode):
                key = key.encode('utf-8')
            new_pairs.append((key, value))
        return dict(new_pairs)
    
    
    messageRead = json.dumps(message, default = myconverter)
    messageRead = json.loads(messageRead, object_pairs_hook=object_pairs_hook)
    print messageRead
    

    请注意,如果要将列表和字典作为值使用,则必须修改对象对挂钩。