2016-10-06 3 views
0

Этот Json принимается как запрос POST. В настоящее время Я хочу получить значение text ключ каждой записи в actions массивне удалось получить атрибут json в запросе POST

Я использую бутылку Питона для получения запроса. , чтобы получить значение требуемого атрибута, я сделал это

word = request.forms.get('[attachments][actions][0][text]') 

Но это не печатает требуемое значение.

{ 
    "attachments": [ 
    { 
     "title": "XYZ", 
     "title_link": "EDWE", 
     "text": "dxjhvgebndm", 
     "fields": [ 
     { 
      "title": "Food", 
      "value": "$20", 
      "short": true 
     } 
     ], 
     "actions": [ 
     { 
      "name": "chess", 
      "text": "Approve", 
      "type": "button", 
      "value": "chess", 
      "style": "primary" 
     }, 
     { 
      "name": "maze", 
      "text": "Decline", 
      "style": "danger", 
      "type": "button", 
      "value": "maze" 
     }, 
     { 
      "name": "war", 
      "text": "More details", 
      "style": "default", 
      "type": "button", 
      "value": "war", 
      "confirm": { 
      "title": "Are you sure?", 
      "text": "Would you like to see more details of your expense?", 
      "ok_text": "Yes", 
      "dismiss_text": "No" 
      } 
     } 
     ], 
     "image_url": "", 
     "thumb_url": "https://i.imgsafe.org/cf40eef.png", 
     "footer": "fghj", 
     "footer_icon": "https://i.imgsafe.org/cf2e0eef.png", 
     "ts": 1475057533 
    } 
    ] 
} 

Примечание: Я получаю полный JSON, проблема заключается в выборе правильного атрибута.

EDIT Благодаря этому я получаю POST

просьбой об
import json 
from bottle import route, run, request 
import urllib 

@route('/ocr_response', method='POST') 
def ocr_response(): 
    body = request.body.read() 
    word = request.forms.get('[attachments][actions][0][text]') 
    print word 
    print body 


if __name__ == "__main__": 
    run(host='0.0.0.0', port=80, debug=True) 
+1

вложение является массивом, но прибудут кажется совершенно неправильным так или иначе –

+0

Вы пытаетесь читать JSON из тела? Почему вы используете 'request.forms.get' вместо того, чтобы разбирать' body' как JSON? –

+0

О, черт возьми, я мог бы непосредственно разобрать тело как JSON серьезно мой плохой – Guru

ответ

3

Это не так, как вы получить доступ к элементам в словаре вообще.

Во-первых, данные JSON доступны через request.json. Во-вторых, я не уверен, что вы делаете с той строкой, которую вы передаете, но вам нужно использовать обычный синтаксис словаря/массива. И в-третьих, вложения - это список, аналогичный действиям, поэтому вам также нужно добавить индекс.

request.json['attachments'][0]['actions'][0]['text'] 
+0

Нет, вы не ошиблись, можете ли вы увидеть править Я сделал сейчас – Guru

+0

Я знаю, как читать JSON, словарь все Проблема, с которой я столкнулась, - это чтение того же словаря в моем 'POST' запрос, который получает значения с помощью 'request.forms.get()' – Guru

+2

@Guru. Я понятия не имею, как ваше изменение меняет мой ответ. Это * не * как вы получаете доступ к вложенным словарям, о чем свидетельствует тот факт, что ваш код не работает. –