0
Python y json

Open 1 Respuestas 1 Views

Gente, estoy probando api.ai para realizar chatbots, pero lo mio no es la programacion. si hay algun craneo que m pueda ayudar con lo siguiente: tengo que leer el Json que pego mas abajo con python. Con el codigo que les copio, puedo leer bien lo que marco en rojo. Pero no encuentro la forma de leer cualquiera de los datos que estan en azul. Alguien me puede ayudar?? al codigo python lo encontre en google y lo acomode a  mi Json.

Request:
{
    "lang": "es",
    "status": {
        "errorType": "success",
        "code": 200,
        "webhookTimedOut": false
    },
    "timestamp": "2017-11-21T12:15:39.367Z",
    "sessionId": "cec8240a-3d25-4051-909f-eb327bf71170",
    "result": {
        "parameters": {
            "zona": "test1",
            "lesoon": "test2"

        },
        "contexts": [
            {
                "name": "test",
                "parameters": {
                    "lesoon.original": "test2",
                    "zona": "test1",
                    "Provincia": "Cordoba",
                    "time-period": "",
                    "Provincia.original": "cordoba",
                    "time-period.original": "",
                    "number": "09080908",
                    "ciudad.original": "calamuchita",
                    "number.original": "9080908",
                    "ciudad": "calamuchita",
                    "lesoon": "test2",
                    "date": "2018-10-24",
                    "date.original": "24/1"

                                    },
                "lifespan": 1
            },
        
         

#!/usr/bin/env python

import urllib
import json
import os

from flask import Flask
from flask import request
from flask import make_response

# Flask app should start in global layout
app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def webhook():
    req = request.get_json(silent=True, force=True)

    print("Request:")
    print(json.dumps(req, indent=4))

    res = makeWebhookResult(req)

    res = json.dumps(res, indent=4)
    print(res)
    r = make_response(res)
    r.headers['Content-Type'] = 'application/json'
    return r

def makeWebhookResult(req):
    result = req.get("result")
    parameters = result.get("parameters")
    zone = parameters.get("zona")
    leson = parameters.get ("lesson")
    result = req.get("contexts")
    parameters = result.get("parameters")
    Provincia = parameters.get("Provincia")
    speech = zone + lesson
   
    print("Response:")
    print(speech)
    return {
        "speech": speech,
       "displayText": speech,
       # #"data": {},
        ##"contextOut": [],
        "source": "leson"
    }

if __name__ == '__main__':
    port = int(os.getenv('PORT', 80))

    print ("Starting app on port %d" %(port))

app.run(debug=True, port=port, host='0.0.0.0')

Agrego esas lines y me da el error:

result = req.get("contexts")
    parameters = result.get("parameters")
    Provincia = parameters.get("Provincia")
          
    parameters = result.get("parameters")
AttributeError: 'NoneType' object has no attribute 'get'

1 Respuesta

0

Vos estás haciendo esto:

    result = req.get("result")
    parameters = result.get("parameters")

Para leer esto:

  "result": {
        "parameters": {
            "zona": "test1",
            "lesoon": "test2"

        },

Para leer esto:


        "contexts": [
            {
                "name": "test",
                "parameters": {
                    "lesoon.original": "test2",
                    "zona": "test1",
                    "Provincia": "Cordoba",
                    "time-period": "",
                    "Provincia.original": "cordoba",
                    "time-period.original": "",
                    "number": "09080908",
                    "ciudad.original": "calamuchita",
                    "number.original": "9080908",
                    "ciudad": "calamuchita",
                    "lesoon": "test2",
                    "date": "2018-10-24",
                    "date.original": "24/1"

                                    },

 

Tendrías que hacer:

    result = req.get("context")
    parameters = result.get("parameters")

 Fijate de usar eso y si te tira un error pasteá el traceback acá, editando la pregunta.

respondido por godlike (8,360 puntos) Nov 21
...