Pythonは文字列をdictに変換します

方法1json.loads

ほとんどのシナリオでは、問題はありません
。文字列内の引用符は二重引用符である必要があります
シリアライザーの後に取得される文字列は一重引用符です。だからいいえ

>>> json.loads(params['filter_extra'])
Traceback (most recent call last):
  File "/Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/_pydevd_bundle/pydevd_exec2.py", line 3, in Exec
    exec(exp, global_vars, local_vars)
  File "<input>", line 1, in <module>
  File "/Users/luoqi/opt/anaconda3/envs/aiops_api_py36/lib/python3.6/json/__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "/Users/luoqi/opt/anaconda3/envs/aiops_api_py36/lib/python3.6/json/decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/Users/luoqi/opt/anaconda3/envs/aiops_api_py36/lib/python3.6/json/decoder.py", line 355, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

このように、Python辞書にロードすることができます

json.dumps(dict(a=1))
'{"a": 1}'

方法2ast.literal_eval

より強力ですが、特に一般的には使用されない場合があります

literal_eval(node_or_string)
式ノードまたはPython
を含む文字列を安全に評価します提供される文字列またはノードは、次の
Pythonリテラル構造のみで構成されます:文字列、バイト、数値、タプル、リスト、dict、
セット、ブール値、およびなし。

params['filter_extra']
"{'sample': {'fields': [], 'filter': [{'field': 'value', 'expression': '> 100'}]}}"

ast.literal_eval(params['filter_extra'])
{
    
    'sample': {
    
    'fields': [], 'filter': [{
    
    'field': 'value', 'expression': '> 100'}]}}

参照

https://www.geeksforgeeks.org/python-convert-string-dictionary-to-dictionary/

おすすめ

転載: blog.csdn.net/qq_42648305/article/details/113096555