为什么是json.dumps文件()和json.loads()生成unicode字符串?

2024-09-27 19:23:24 发布

您现在位置:Python中文网/ 问答频道 /正文

{'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}

这是我的字符串,我需要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)

Tags: thetojsondatetimeattweetfirstprint
2条回答

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

  • datetime.datetime(2018, 5, 25, 13, 35, 11)不是有效的字符串。您可以将其作为字符串读取并在加载后解析它。在
  • 删除\n
  • '替换为"(Python支持',但JSON不支持)
  • ^JSON中也不允许使用{}

您的字符串可以如下所示:

{ "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!#SRHvKKR #TeesraVaar #KKRHaiTaiyaar", "id": 1000007371131764736, "sequence": 1 }

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

请参阅此处的JSON RFC以了解JSON支持的内容:https://tools.ietf.org/html/rfc7159

这就是python2.7中json.loads的工作方式。 最简单的方法是切换到python3。如果你想坚持使用python2.7,可以使用object_pairs_hook。在

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

请注意,如果您想让object_pairs_hook与列表和字典作为值一起使用,则必须修改它

相关问题 更多 >

    热门问题