类型为'Response'的对象不是JSON可序列化的,不断返回

时间:2018-09-27 21:26:16

标签: python-3.x plotly mapbox plotly-dash

我正在尝试创建一个带有绘图和破折号的交互式仪表板。我的目标是向Mapbox地图添加数据点(纬度,经度)。使用数据点静态创建地图效果很好,但是我需要通过下拉菜单来控制要在地图上显示哪些数据点。

我认为问题在于每次我尝试将数据传递到地图时,格式都不正确。错误对应的错误代码为: “响应”类型的对象不可JSON序列化

我已经尝试使用jasonify和json.dumps(objects)将数据转换为jason。我还在论坛/互联网上阅读了许多类似的问题(关于我的错误),但没有一个能帮助我弄清楚我的问题。

我通常使用教程并修改代码。我有类似的图形,下拉菜单等。但是地图不起作用。

有人可以向我解释我做错了什么吗?我想从答案中学习,但我对python的编程还不是很熟练。

如果您有任何疑问或我不够详细,请告诉我。

问候斯蒂芬

下面是我的代码:

from flask import jsonify
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.plotly as py
import plotly.graph_objs as go
import pandas as pd
import plotly.plotly as py
import pyodbc
from sqlalchemy import create_engine
import numpy as np

mapbox_access_token = 'pk.eyJ1Ijoic2VtcGFoIiwiYSI6ImNqbHBoaXU5YjF5bHkzcHBncXFkejl0MjAifQ.0R2VfR5a8_owewhbx16a6w'

app = dash.Dash(__name__)
app.config['supress_callback_exceptions']=True

all_options = {
    'Company1': ['52.33076869999999', '4.914620499999955'],
    'Company2': [u'52.0916142', '5.106795599999941']
}

dict1 = {'name': 'Company1', 'lat': '52.33076869999999', 'lon': '4.914620499999955'}

dict2 = {'name': u'Company2', 'lat': '52.0916142', 'lon': '5.106795599999941'}


latitude = []
longtitude = []

def set_cities_value(available_options):
    return available_options[0]['value']

@app.callback(
    dash.dependencies.Output('display-selected-values', 'children'),
    [dash.dependencies.Input('company-dropdown', 'value')])
     

@app.callback(
    dash.dependencies.Output('graph', 'children'),
    [dash.dependencies.Input('company-dropdown', 'value')])

def set_display_children(selected_company):
    if selected_company == 'Company1': 

        lat = dict1['lat']
        lon = dict1['lon']
        
        latitude.append(lat)
        
        longtitude.append(lon)
        
        print(latitude)
        print(longtitude)

    else:
        
        lat = dict2['lat']
        lon = dict2['lon']

        latitude.append(lat)
        longtitude.append(lon)

        

datamap = [
    go.Scattermapbox(
        lat=  latitude,
        lon=  longtitude,
        mode='markers',
        marker=dict(
            size=10
        ),
        text=['Testing'],
    )
]

layoutmap = go.Layout(
    autosize=False,
    margin={
    't':10
    },
    height=700,
    hovermode='closest',
    mapbox=dict(
        accesstoken=mapbox_access_token,
        bearing=0,
        center=dict(
            lat=52.090737,
            lon=5.12142
        ),
        pitch=0,
        zoom=6.6,
        style='light',
    ),
)

fig = dict(data=datamap, layout=layoutmap)
   
app.layout = html.Div([
    dcc.Dropdown(
        id='company-dropdown',
        options=[{'label': k, 'value': k} for k in all_options.keys()],
        value='Company1'
    ),

    html.Hr(),

    dcc.Graph(id='graph', figure=fig),

    html.Hr(),

    html.Div(id='display-selected-values')
])


if __name__ == '__main__':
    app.run_server(debug=True)

0 个答案:

没有答案