3

データ型が unicodeのデータs = u"[u'38', u'36', u'34', u'32']"があります。このデータを のような要素の単純なリストとして作成したいのですがs= ['38','36','32']
simplejson.loads を使用しようとしましたが、単純な json が ('["s"]') で機能しません。文字列は ("['s']") ではないので、この問題を解決する方法を教えてください。

前もって感謝します

4

4 に答える 4

9
>>> import ast
>>> s = u"[u'38', u'36', u'34', u'32']"
>>> [ item.encode('ascii') for item in ast.literal_eval(s) ]
['38', '36', '34', '32']
于 2011-04-13T11:51:34.187 に答える
1

が利用可能な場合astは、使用できますast.literal_eval

于 2011-04-13T11:53:41.780 に答える
1

問題は、その文字列が有効な JSON 構文ではないことです。次の 2 つの理由から、これは有効なPython構文ですが、JSON ではありません。

  1. JSON では、単一引用符文字列 は許可されず、'38'二重引用符のみが許可されます"38"
  2. JSON では、文字列 の前に au を使用できません。u"38"暗黙的に Unicode である裸の文字列のみを使用でき"38"ます。

入力形式を変更するか、代わりに Python 文字列を処理できるものを使用する必要があります。

Python 構文を含む文字列を読み取るを使用することもできますevalが、誰かが実行するコードを提供できるため、任意の入力を受け入れる場合は非常に危険であることに注意してください。それにもかかわらず、それは機能します:

>>> eval(u"[u'38', u'36', u'34', u'32']")
[u'38', u'36', u'34', u'32']

編集eval: khachik の答えは、Python データ構造のみを読み取り、任意の Python コードを評価する影響を受けないため、おそらく よりも優れています。

于 2011-04-13T11:54:01.017 に答える
0

モジュールを使用reして、文字列を必要な要素に分割します。例えば

re.findall("u\'([^\']+)\'", u"[u'38', u'36', u'34', u'32']")
于 2011-04-13T11:52:00.723 に答える