I am using Google Endpoints Framework with Python (https://cloud.google.com/endpoints/docs/frameworks/python/get-started-frameworks-python) and have been building REST APIs with it.
我正在使用带有Python的Google端点框架(https://cloud.google.com/endpoints/docs/frameworks/python/get-started-frameworks-python),并且一直在使用它构建REST API。
I am able to return JSON object (dictionaries) in the response like:
我能够在响应中返回JSON对象(字典),如:
{
"items":[
{
"id": "brand_1_id",
"name": "Brand 1"
},
{
"id": "brand_2_id",
"name": "Brand 2"
}
]
}
However, I am not able to return a JSON array (list) as response like:
但是,我无法返回JSON数组(列表)作为响应,如:
[ { "id": "brand_1_id", "name": "Brand 1" }, { "id": "brand_2_id", "name": "Brand 2" } ]
[{“id”:“brand_1_id”,“name”:“Brand 1”},{“id”:“brand_2_id”,“name”:“Brand 2”}]
Following are the code snippets I have been using to return the response
以下是我一直用来返回响应的代码片段
Following are the classes created to send a response:
以下是为发送响应而创建的类:
class BrandResponse(messages.Message):
id=messages.StringField(1, required=True)
brandName = messages.StringField(2, required=True)
brandEmail=messages.StringField(3, required=True)
brandPhone=messages.StringField(4,required=True)
brandAddress=messages.StringField(5,required=True)
brandCity=messages.StringField(6,required=True)
brandState=messages.StringField(7,required=True)
brandCountry=messages.StringField(8,required=True)
brandPostalCode=messages.StringField(9,required=True)
class MultipleBrandResponse(messages.Message):
items=messages.MessageField(BrandResponse,1,repeated=True)
Following is the method that processes the request:
以下是处理请求的方法:
@endpoints.method(
MULTIPLE_BRAND_PAGINATED_CONTAINER,
MultipleBrandResponse,
path='brand',
http_method='GET',
name='Get Brands',
audiences=firebaseAudience
)
def getBrands(self,request):
brandResponse=[]
query = BrandDB.query()
brands = query.fetch(request.limit, offset=request.start)
for brand in brands:
brandResponse.append(BrandResponse(
id=brand.key.urlsafe(),
brandName=brand.name,
brandAddress=brand.address,
brandCity=brand.city,
brandState=brand.state,
brandCountry=brand.country,
brandPostalCode=brand.postalCode,
brandPhone=brand.phone,
brandEmail=brand.email))
print("Brand count: "+str(brandResponse.count))
if len(brandResponse) == 0:
raise endpoints.NotFoundException("No brands")
return MultipleBrandResponse(items=brandResponse)
Any idea how to return JSON array directly rather than wrapping in side a key inside a JSON object.
知道如何直接返回JSON数组,而不是在JSON对象中包含一个键。
1 个解决方案
#1
1
The framework is designed around returning Protocol Buffer messages, not JSON. It's possible you may have specified a message which that dict structure matches; hard to say without seeing your code.
该框架是围绕返回协议缓冲区消息而非JSON而设计的。你可能已经指定了一个dict结构匹配的消息;很难说没有看到你的代码。
#1
1
The framework is designed around returning Protocol Buffer messages, not JSON. It's possible you may have specified a message which that dict structure matches; hard to say without seeing your code.
该框架是围绕返回协议缓冲区消息而非JSON而设计的。你可能已经指定了一个dict结构匹配的消息;很难说没有看到你的代码。