如何通过protoRPC返回一个类似dict的对象?
我试着使用FieldList,但没有用。我只看到以下字段定义:
'IntegerField',
'FloatField',
'BooleanField',
'BytesField',
'StringField',
'MessageField',
'EnumField',发布于 2012-11-27 10:34:47
有两种情况:
1)您的 dict 有一个定义良好的模式:这是ProtoRPC的最佳用例,如果可能,您应该尝试将其与模式相适应。在本例中,您将使用带有一些与字典中的模式相匹配的Message类的MessageField。
例如,而不是
{'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),然后在字段中使用此消息定义(通过
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, 'type': 'fish', mine: False}
message = MyMessage(some_dict=json.dumps(my_dict, ensure_ascii=True))由于True是默认设置,因此使用ensure_ascii是可选的,但根据您的环境,这一点可能会有所不同。
相反,您可以使用pickle来序列化字典。方法pickle.dumps总是输出ASCII/binary,所以通过用json.dumps替换pickle.dumps并删除ensure_ascii=True,您将得到相同的结果。
发布于 2015-06-11 16:30:53
可以像这样创建自定义JsonField:
In [1]: class JsonField(messages.StringField):
type = dict然后,您可以将其用作任何其他字段:
In [2]: class MyMessage(messages.Message):
data = JsonField(1)
In [3]: m = MyMessage(data={"foo": "bar"})
In [4]: m.data
Out [4]: {'foo': 'bar'}发布于 2013-04-22 18:32:01
对于认可答案中的第一个选项,我们可以添加一个参数repeated=True,因此我们将有一个json列表作为答案。我在https://developers.google.com/appengine/docs/python/tools/protorpc/overview?hl=en#Defining_the_Response_Message上查过了
https://stackoverflow.com/questions/13576140
复制相似问题