加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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,你会得到相同的结果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读