jld*_*ont 3 python google-app-engine protorpc
如何dict通过一个类似的对象返回protoRPC?
我试过用了 FieldList无效.我只看到以下字段定义:
'IntegerField',
'FloatField',
'BooleanField',
'BytesField',
'StringField',
'MessageField',
'EnumField',
Run Code Online (Sandbox Code Playgroud)
有两种情况:
1)你dict有一个明确定义的模式:这是ProtoRPC的最佳用例,如果可能的话,你应该尝试将它放入模式中.在这种情况下,您将使用一个MessageField与Message您的字典中的架构匹配的类.
例如,而不是
{'amount': 31, 'type': 'fish', mine: False}
Run Code Online (Sandbox Code Playgroud)
你可以定义
from protorpc import messages
class MyCatch(messages.Message):
amount = messages.IntegerField(1)
type = messages.StringField(2)
mine = messages.BooleanField(3)
Run Code Online (Sandbox Code Playgroud)
然后在字段中使用此消息定义
messages.MessageField(MyCatch, index, ...)
Run Code Online (Sandbox Code Playgroud)
2)您dict没有明确定义的模式:在这种情况下,您可以使用json将字典转储到字符串并请求ensure_ascii=True确保返回类型是bytes(str)对象.然后你可以使用一个BytesField.
例如:
import json
class MyMessage(messages.Message):
some_dict = messages.BytesField(1)
my_dict = {'amount': 31, 'type': 'fish', mine: False}
message = MyMessage(some_dict=json.dumps(my_dict, ensure_ascii=True))
Run Code Online (Sandbox Code Playgroud)
默认使用ensure_ascii是可选True的,但这可能会根据您的环境而改变.
相反,您可以使用pickle序列化字典.该方法pickle.dumps始终输出ASCII /二进制,所以通过交换json.dumps的pickle.dumps和下降的ensure_ascii=True,你有同样的结果.
| 归档时间: |
|
| 查看次数: |
2078 次 |
| 最近记录: |