Heim  >  Artikel  >  Backend-Entwicklung  >  So konvertieren Sie eine Zeichenfolge in ein Wörterbuch

So konvertieren Sie eine Zeichenfolge in ein Wörterbuch

anonymity
anonymityOriginal
2019-05-25 11:20:4916219Durchsuche

Bei der eigentlichen Arbeit müssen Sie eine Python-Zeichenfolge in ein Wörterbuch konvertieren, z. B. die Zeichenfolge:

user_info = '{"name" : "john", "gender" : "male", "age". ": 28}'

Wir wollen es in das folgende Wörterbuch umwandeln:

user_dict = {"name" : "john", "gender" : "male", "age": 28}

So konvertieren Sie eine Zeichenfolge in ein Wörterbuch

Es gibt mehrere Methoden:

1. Konvertieren Sie

>>> import json
>>> user_info= '{"name" : "john", "gender" : "male", "age": 28}'
>>> user_dict = json.loads(user_info)
>>> user_dict
{u'gender': u'male', u'age': 28, u'name': u'john'}

über JSON, aber verwenden Sie There is ein potenzielles Problem bei der Konvertierung in JSON.

Da die JSON-Syntax vorschreibt, dass Zeichenfolgen in Arrays oder Objekten doppelte Anführungszeichen verwenden müssen, können einfache Anführungszeichen nicht verwendet werden (eine Beschreibung auf der offiziellen Website lautet „Eine Zeichenfolge ist eine Folge von null oder mehr Unicode-Zeichen, die in doppelte Anführungszeichen eingeschlossen sind). Anführungszeichen, Verwendung von Backslash-Escapes"), daher ist die folgende Konvertierung falsch:

>>> import json
>>> user_info = "{'name' : 'john', 'gender' : 'male', 'age': 28}"
# 由于字符串使用单引号,会导致运行出错
>>> user_dict = json.loads(user_info)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 339, in loads
    return _default_decoder.decode(s)
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 380, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 2 (char 1)

2. Die Konvertierung durch eval

>>> user_info = &#39;{"name" : "john", "gender" : "male", "age": 28}&#39;
>>> user_dict = eval(user_info)
>>> user_dict
{&#39;gender&#39;: &#39;male&#39;, &#39;age&#39;: 28, &#39;name&#39;: &#39;john&#39;}
>>> user_info = "{&#39;name&#39; : &#39;john&#39;, &#39;gender&#39; : &#39;male&#39;, &#39;age&#39;: 28}"
>>> user_dict = eval(user_info)
>>> user_dict
{&#39;gender&#39;: &#39;male&#39;, &#39;age&#39;: 28, &#39;name&#39;: &#39;john&#39;}

ist bei Verwendung von json oben nicht möglich. Problem mit Konvertierung. Bei der Verwendung von eval gibt es jedoch Sicherheitsprobleme, wie zum Beispiel das folgende Beispiel:

# 让用户输入 `user_info`
>>> user_info = raw_input(&#39;input user info: &#39;)
# 输入 {"name" : "john", "gender" : "male", "age": 28},没问题
>>> user_dict = eval(user_info)
# 输入 __import__(&#39;os&#39;).system(&#39;dir&#39;),user_dict 会列出当前的目录文件!
# 再输入一些删除命令,则可以把整个目录清空了!
>>> user_dict = eval(user_info)

3. Es gibt keine Verwendung von ast.literal_eval für die Konvertierung durch literal_eval

>>> import ast
>>> user = &#39;{"name" : "john", "gender" : "male", "age": 28}&#39;
>>> user_dict = ast.literal_eval(user)
>>> user_dict
{&#39;gender&#39;: &#39;male&#39;, &#39;age&#39;: 28, &#39;name&#39;: &#39;john&#39;}
user_info = "{&#39;name&#39; : &#39;john&#39;, &#39;gender&#39; : &#39;male&#39;, &#39;age&#39;: 28}"
>>> user_dict = ast.literal_eval(user)
>>> user_dict
{&#39;gender&#39;: &#39;male&#39;, &#39;age&#39;: 28, &#39;name&#39;: &#39;john&#39;}

Bei der JSON-Konvertierung gibt es bei der Eval-Konvertierung kein Sicherheitsproblem, daher wird die Verwendung von ast.literal_eval empfohlen.

Das obige ist der detaillierte Inhalt vonSo konvertieren Sie eine Zeichenfolge in ein Wörterbuch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn