python – protoRPC:返回dict
发布时间:2020-12-20 12:29:21 所属栏目:Python 来源:网络整理
导读:如何通过protoRPC返回类似对象的dict? 我尝试使用FieldList无济于事.我只看到以下字段定义: 'IntegerField','FloatField','BooleanField','BytesField','StringField','MessageField','EnumField', 解决方法 有两种情况: 1)你的dict有一个明确定义的模式
如何通过protoRPC返回类似对象的dict?
我尝试使用FieldList无济于事.我只看到以下字段定义: 'IntegerField','FloatField','BooleanField','BytesField','StringField','MessageField','EnumField', 解决方法
有两种情况:
1)你的dict有一个明确定义的模式:这是ProtoRPC的最佳用例,如果可能的话,你应该尝试将它放入模式中.在这种情况下,您将使用MessageField和一些与您的字典中的架构匹配的Message类. 例如,而不是 {'amount': 31,'type': 'fish',mine: False} 你可以定义 from protorpc import messages class MyCatch(messages.Message): amount = messages.IntegerField(1) type = messages.StringField(2) mine = messages.BooleanField(3) 然后在字段via中使用此消息定义 messages.MessageField(MyCatch,index,...) 2)您的dict没有明确定义的模式:在这种情况下,您可以使用json将字典转储为字符串并请求ensure_ascii = True以确保返回类型是字节(str)对象.然后你可以使用BytesField. 例如: import json class MyMessage(messages.Message): some_dict = messages.BytesField(1) my_dict = {'amount': 31,mine: False} message = MyMessage(some_dict=json.dumps(my_dict,ensure_ascii=True)) Ensure_ascii的使用是可选的,因为True是默认值,但这可能会根据您的环境而改变. 相反,你可以使用pickle来序列化你的字典.方法pickle.dumps总是输出ASCII /二进制,所以通过交换pickle.dumps的json.dumps并删除ensure_ascii = True,你会得到相同的结果. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |