在Python 2 中從ASCII 編碼的文字檔案解析JSON 時,預設行為是表示字元串作為Unicode 物件的值。在使用僅接受字串物件的庫時,這可能會帶來問題。
幸運的是,有多種方法可以取得字串物件而不是Unicode 物件:
PyYAML 是一個用於解析YAML 的Python 函式庫,YAML是JSON 的超集。它提供了一種在保留 JSON 結構的同時獲取字串物件的便捷方法:
<code class="python">import yaml json_string = '["a", "b"]' data = yaml.safe_load(json_string) # Returns a list of strings</code>
注意:此方法僅適用於 ASCII 編碼的資料。
如果資料是Unicode 編碼的,您可以使用轉換函數將Unicode 字串轉換為常規字串:
<code class="python">def unicode_to_string(obj): if isinstance(obj, basestring): return obj.encode('utf-8') elif isinstance(obj, dict): return dict((unicode_to_string(k), unicode_to_string(v)) for k, v in obj.iteritems()) elif isinstance(obj, list): return [unicode_to_string(v) for v in obj] else: return obj # Usage: json_string = '["\u00e1", "\u00e9"]' data = json.loads(json_string) converted_data = unicode_to_string(data) # Converts Unicode strings to strings</code>
您也可以在序列化過程中使用物件鉤子將Unicode字串轉換為字串:
<code class="python">import json def object_hook(obj): if isinstance(obj, unicode): return obj.encode('utf-8') return obj # Usage: json_string = '["a", "b"]' data = json.loads(json_string, object_hook=object_hook) # Converts Unicode strings to strings during deserialization</code>
以上是如何在 Python 2 中從 JSON 取得字串物件而不是 Unicode?的詳細內容。更多資訊請關注PHP中文網其他相關文章!