Python 为什么json.dumps()和json.loads()会生成unicode字符串?
{'created_at':datetime.datetime(2018,5,25,13,35,11),'tweet': “RT@KKRiders:Mavi将在预选赛中打出第一球2.萨哈 罢工。我们走吧!\n\n#SRHvKKR#teesravar#krhaitaiyar“,“id”: 100000737131764736,“序列”:1} 这是我的字符串,我需要json格式Python 为什么json.dumps()和json.loads()会生成unicode字符串?,python,json,unicode,Python,Json,Unicode,{'created_at':datetime.datetime(2018,5,25,13,35,11),'tweet': “RT@KKRiders:Mavi将在预选赛中打出第一球2.萨哈 罢工。我们走吧!\n\n#SRHvKKR#teesravar#krhaitaiyar“,“id”: 100000737131764736,“序列”:1} 这是我的字符串,我需要json格式 def myconverter(o): if isinstance(o, datetime.datetime):
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)
您的json无效。要解决此问题,请首先修改字符串:
不是有效字符串。您可以将其作为字符串进行读取和传递,并在加载后对其进行解析datetime.datetime(2018,5,25,13,35,11)
- 删除
\n
- 将
替换为“
(Python支持”
,但JSON不支持afaik)”
- JSON中也不允许使用“
\”
请参阅此处的JSON RFC以了解JSON支持的内容:您的JSON无效。若要解决此问题,请首先修改您的字符串:
不是有效字符串。您可以将其作为字符串读取并传递,然后在加载后对其进行分析datetime.datetime(2018,5,25,13,35,11)
- 删除
\n
- 将
替换为“
(Python支持”
,但JSON不支持afaik)”
- JSON中也不允许使用“
\”
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
请注意,如果要将列表和字典用作值,必须修改对象\u pairs\u hook,这就是python2.7中的工作方式。
最简单的方法是切换到。如果你想坚持python2.7,你可以使用object\u pairs\u钩子
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
请注意,如果要将列表和字典用作值,必须修改对象\u pairs\u hook