2012-06-19 4 views
1

Есть ли способ легко извлечь часть данных json в теле запроса POST? Например, если кто-то сообщение в www.example.com/post с телом формы с данными JSON, мой сервер GAE получит запрос по телефону:извлечение данных json из запроса тела тела с питоном

jsonstr = self.request.body 

Однако, когда я смотрю на jsonstr , я получаю что-то вроде:

str: \r\n----------------------------8cf1c255b3bd7f2\r\nContent-Disposition: form-data; 
name="Actigraphy"\r\n Content-Type: application/octet- 
stream\r\n\r\n{"Data":"AfgCIwHGAkAB4wFYAZkBKgHwAebQBaAD..... 

Я просто хочу, чтобы иметь возможность вызвать функцию для извлечения JSon часть тела, которая начинается с { «Data»: ...... раздел.

Есть ли простая функция, которую я могу позвонить, чтобы сделать это?

ответ

2

есть недоразумение, строка, которую вы показываете нам, не является данными json, это похоже на тело POST. Вы должны разобрать тело с чем-то вроде cgi.parse_multipart. Тогда вы можете разобрать json, как ответили aschmid00. Но вместо тела вы анализируете только данные.

Здесь вы найдете working code that shows how to use cgi.FieldStorage for parsing the POST body. Этот вопрос также является answered here..

0

вы можете попробовать:

import json 
values = 'random stuff .... \r\n {"data":{"values":[1,2,3]}} more rnandom things' 
json_value = json.loads(values[values.index('{'):values.rindex('}') + 1]) 
print json_value['data'] # {u'values': [1, 2, 3]} 
print json_value['data']['values'] # [1, 2, 3] 

но это опасно и занимает изрядное количество предположений, я не уверен, какая рамку вы используете, бутылки, колбы, Theres много, пожалуйста, используйте соответствующий вызов до POST , чтобы получить значения на основе фреймворка, если вы его используете.

Я думаю, вы хотите это сделать self.request.get("Data") Если вы используете GAE самостоятельно.

https://developers.google.com/appengine/docs/python/tools/webapp/requestclass#Request_get https://developers.google.com/appengine/docs/python/tools/webapp/requestclass#Request_get_all

2

Это зависит от того, как она была закодирована на стороне браузера перед отправкой, но, как правило, вы получите данные POST, как это:

jsonstr = self.request.POST["Data"] 

Если это не работает, вы можете чтобы дать нам некоторую информацию о том, как «Данные» были закодированы в данные POST на стороне клиента.

Смежные вопросы