Plotly-Dash:TypeError:字符串索引必须是整数

2024-05-16 04:08:25 发布

您现在位置:Python中文网/ 问答频道 /正文

回调函数display_popupmapbox graphcustomdata参数迭代json字符串传递并读取值。当我在jupyter notebook中没有函数的情况下运行代码时,它不会抛出错误

@app.callback([Output("modal","is_open"),
           Output("name","children"),
           Output("address","children")],
          [Input("map-graph1","clickData")]
         )
def display_popup(clickData):

    res = json.dumps(clickData, indent=2)

    Tenant = res['points'][0]['customdata']['Tenant']
       
    Address = res['points'][0]['customdata']['Address']
        
    print(Tenant, Address)

clickData = {
             "points": [
              {
               "curveNumber": 64,
               "pointNumber": 0,
               "pointIndex": 0,
               "lon": -112.07451978751655,
               "lat": 33.459071231389125,
               "customdata": {
                              "Tenant": "HeartFlow",
                              "Industry": "Advertising",
                              "Space": 65195,
                              "Property": "Retail",
                              "Bldg. class": "A",
                              "Lease Type": "Flex",
                              "Rent": 36.28,
                              "Address": "100 W Roosevelt St, Phoenix, AZ 85003, USA"
                             }
                }
          ]
        }

或者,我也尝试了使用键、值对的字典

for x in res['points']:

    cd = x.get('customdata')

    name = cd.get('Tenant')
    address = cd.get('Address')

仍然抛出一个TypeError: string indices must be integers


Tags: 函数namejsonoutputgetaddressdisplaycd
1条回答
网友
1楼 · 发布于 2024-05-16 04:08:25

下面是修复它的代码:

# Update modal on click event
@app.callback([Output("modal","is_open"),
               Output("Name","children"),
               Output("Address","children")],

              [Input("map-graph1","clickData"),
               Input("close","n_clicks")],

              [State("modal", "is_open")],
)
def display_popup(clickData, close, is_open):

    if clickData is None:

        return [no_update] * 3

    else:

        #res = json.dumps(clickData, indent=2)

        Tenant = clickData['points'][0]['customdata']['Tenant']
        Address = clickData['points'][0]['customdata']['Address']
        

        return(not is_open, Tenant, Address)

    if close:

        return is_open

相关问题 更多 >