Python 使用Flask解析API中的JSON数据?

Python 使用Flask解析API中的JSON数据?,python,json,flask,Python,Json,Flask,我试图解析API中的一些数据,然后通过Flask web应用程序剥离并仅显示所需的信息。对于我来说,这似乎是一个很好的学习案例,构建一个Flask web应用程序,它本质上充当API的接口 这是我开始使用的脚本: # !/usr/bin/env python from __future__ import print_function from functools import wraps from flask import Flask, Response, request, jsonify, r

我试图解析API中的一些数据,然后通过Flask web应用程序剥离并仅显示所需的信息。对于我来说,这似乎是一个很好的学习案例,构建一个Flask web应用程序,它本质上充当API的接口

这是我开始使用的脚本:

# !/usr/bin/env python
from __future__ import print_function
from functools import wraps
from flask import Flask, Response, request, jsonify, render_template, Request, json
from flask_bootstrap import Bootstrap
import time
import acos_client as acos

app = Flask(__name__)
app.config['SECRET_KEY'] = 'topsecret!'
bootstrap = Bootstrap(app)

c = acos.Client('1.2.3.4', acos.AXAPI_21, 'admin', 'password')


def get_sl1():
    result = {}

    sl1 = c.slb.virtual_server.all()
    result['x'] = sl1['virtual_server_list'][0]
    result['y'] = sl1['virtual_server_list'][0]['vport_list'][0]
    return (sl1, result)


@app.route('/', methods=['GET','POST'])
def index():
    sl1, sl1_dict = get_sl1()
    return render_template('srvlist.html', x=sl1_dict['x'], y=sl1_dict['y'], sl1=sl1)

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)
最主要的是理解我获取并存储为“sl1”的数据:

我的烧瓶模板如下所示:

{% extends "bootstrap/base.html" %}
{% import "bootstrap/wtf.html" as wtf %}

{% block title %}A10 Server List{% endblock %}

{% block navbar %}
    <nav class="navbar navbar-inverse" role="navigation">
        <div class="container">
            <a class="navbar-brand" href="{{ url_for('index') }}">A10 Server List</a>
        </div>
    </nav>
{% endblock %}

{% block content %}
    <div class="container">
        <div class="row">
            <div class="col">
                {% for row in x %}
                    <tr>
                        <td><b>VIP Name: {{ row['name'] }}</td></b>
                        <td><b>VIP Address: {{ row['address'] }}</b></td>
                    </tr><br><BR>
                {% endfor %}


               {% for row in y %}
                    <tr>
                    <td>VPort Name: {{ row['vport_name'] }}</td>
                    <td>Service Group: {{ row['service_group'] }}</td>
                    <td>Port: {{ row['port'] }}</td>
                    </tr><BR>
                {% endfor %}
            </div>
        </div>

    </div>

{% endblock %}
然而,我得到的只是空白:

VIP Name: VIP Address: 

VIP Name: VIP Address: 

VPort Name: Service Group: Port: 
VPort Name: Service Group: Port: 
VPort Name: Service Group: Port: 
显然,由于各种嵌套的dicts列表,我无法正确访问数据

我认为这应该是相当接近和可行的,只是没有正确地解析数据


任何帮助都将不胜感激。

不确定该问题是否与
解析相关。您的问题可能与
jinja+渲染相关

app.py

app = Flask(__name__)
app.config['SECRET_KEY'] = 'topsecret!'
# your data c.slb.virtual_server.all()
data_from_server = {"virtual_server_list": ...}

with app.app_context():
    print(render_template(
       'srvlist.html',
       template_data=data_from_server['virtual_server_list']))
模板/srvlist.html

{% block content %}
    {#  template_data is a list  #}
    {#  example data:
        template_data = [
        {
            'name': 'n1',
            'address': 'a1',
            'vport_list': [
            {
               'vport_name': 'vp1',
               'service_group': 'group1',
               'port': 8000
             }]
        }]
    #}
    {% for row in template_data %}
        {#  row is a dict - {'name': 'val', 'address': 'val'}  #}
        VIP Name: {{ row['name'] }}
        VIP Address: {{ row['address'] }}
        {#  row['vport_list'] is a list  #}
        {% for port in row['vport_list'] %}
            {#  port is a dict - {'vport_name': 'val', 'service_group': 'val', 'port': 8000} #}
            VPort Name: {{ port['vport_name'] }}
            Service Group: {{ port['service_group'] }}
            Port: {{ port['port'] }}
        {% endfor %}
    {% endfor %}
{% endblock %}
请参阅模板中的注释。希望这有帮助

app = Flask(__name__)
app.config['SECRET_KEY'] = 'topsecret!'
# your data c.slb.virtual_server.all()
data_from_server = {"virtual_server_list": ...}

with app.app_context():
    print(render_template(
       'srvlist.html',
       template_data=data_from_server['virtual_server_list']))
{% block content %}
    {#  template_data is a list  #}
    {#  example data:
        template_data = [
        {
            'name': 'n1',
            'address': 'a1',
            'vport_list': [
            {
               'vport_name': 'vp1',
               'service_group': 'group1',
               'port': 8000
             }]
        }]
    #}
    {% for row in template_data %}
        {#  row is a dict - {'name': 'val', 'address': 'val'}  #}
        VIP Name: {{ row['name'] }}
        VIP Address: {{ row['address'] }}
        {#  row['vport_list'] is a list  #}
        {% for port in row['vport_list'] %}
            {#  port is a dict - {'vport_name': 'val', 'service_group': 'val', 'port': 8000} #}
            VPort Name: {{ port['vport_name'] }}
            Service Group: {{ port['service_group'] }}
            Port: {{ port['port'] }}
        {% endfor %}
    {% endfor %}
{% endblock %}