由于Apache Superset中的JSON解码错误,无法加载仪表板列表

问题描述

我正在尝试在我的Superset中获取仪表板,但遇到以下错误

ERROR:root:Expecting ',' delimiter: line 1 column 106 (char 105)

上面的错误是我拖了豆荚的时候。

在前端,我只会看到:An error occurred while fetching dashboards.

完整的堆栈跟踪为:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/flask_appbuilder/api/__init__.py",line 84,in wraps
    return f(self,*args,**kwargs)
  File "/usr/local/lib/python3.6/site-packages/flask_appbuilder/api/__init__.py",line 154,line 1567,in get_list
    return self.get_list_headless(**kwargs)
  File "/usr/local/lib/python3.6/site-packages/superset/views/base_api.py",line 232,in get_list_headless
    duration,response = time_function(super().get_list_headless,**kwargs)
  File "/usr/local/lib/python3.6/site-packages/superset/utils/core.py",line 1296,in time_function
    response = func(*args,line 1469,in get_list_headless
    _response[API_RESULT_RES_KEY] = _list_model_schema.dump(lst,many=True)
  File "/usr/local/lib/python3.6/site-packages/marshmallow/schema.py",line 557,in dump
    result = self._serialize(processed_obj,many=many)
  File "/usr/local/lib/python3.6/site-packages/marshmallow/schema.py",line 517,in _serialize
    for d in typing.cast(typing.Iterable[_T],obj)
  File "/usr/local/lib/python3.6/site-packages/marshmallow/schema.py",in <listcomp>
    for d in typing.cast(typing.Iterable[_T],line 521,in _serialize
    value = field_obj.serialize(attr_name,obj,accessor=self.get_attribute)
  File "/usr/local/lib/python3.6/site-packages/marshmallow/fields.py",line 308,in serialize
    value = self.get_value(obj,attr,accessor=accessor)
  File "/usr/local/lib/python3.6/site-packages/marshmallow/fields.py",line 227,in get_value
    return accessor_func(obj,check_key,default)
  File "/usr/local/lib/python3.6/site-packages/marshmallow/schema.py",line 478,in get_attribute
    return get_value(obj,default)
  File "/usr/local/lib/python3.6/site-packages/marshmallow/utils.py",in get_value
    return _get_value_for_key(obj,key,line 246,in _get_value_for_key
    return getattr(obj,default)
  File "/usr/local/lib/python3.6/site-packages/superset/models/dashboard.py",line 158,in url
    json_Metadata = json.loads(self.json_Metadata)
  File "/usr/local/lib/python3.6/json/__init__.py",line 354,in loads
    return _default_decoder.decode(s)
  File "/usr/local/lib/python3.6/json/decoder.py",line 339,in decode
    obj,end = self.raw_decode(s,idx=_w(s,0).end())
  File "/usr/local/lib/python3.6/json/decoder.py",line 355,in raw_decode
    obj,end = self.scan_once(s,idx)
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 1 column 106 (char 105)

我试图查看数据库中的dashboards表,但未发现任何异常情况。 我尝试加载仪表板页面(/ dashboard / list /),并收到与上述相同的JSON错误

在我的数据库中,我尝试将所有仪表板标记false下的published,即使该错误没有消失。

解决方法

似乎json_metadata列在仪表板表的1行或全部行中都被打断了。我将尝试弄清其失败的原因(看起来像是this line)。您可以尝试对数据库运行超集的开发版本,并在失败的地方添加一些日志记录。您还可以尝试检查该表中的json_metadata列(尝试将其提供给python json解析器),看看是否可以确定导致json.loads函数失败的问题。