Używam json.dump() i json.load() do zapisywania/odczytu słownika łańcuchów do/z dysku. Problem polega na tym, że nie mogę mieć żadnego z łańcuchów w Unicode. Wydaje się, że są w unicode, niezależnie od tego, jak ustawić parametry do zrzutu/ładowania (w tym zapewnienie_ascii i kodowania).Wymuszanie modułu json Python do pracy z ASCII
15
A
Odpowiedz
20
Jeśli jesteś po prostu do czynienia z prostych obiektów JSON, można użyć następujących:
def ascii_encode_dict(data):
ascii_encode = lambda x: x.encode('ascii')
return dict(map(ascii_encode, pair) for pair in data.items())
json.loads(json_data, object_hook=ascii_encode_dict)
Oto przykład jak to działa:
>>> json_data = '{"foo": "bar", "bar": "baz"}'
>>> json.loads(json_data) # old call gives unicode
{u'foo': u'bar', u'bar': u'baz'}
>>> json.loads(json_data, object_hook=ascii_encode_dict) # new call gives str
{'foo': 'bar', 'bar': 'baz'}
This answer prace dla bardziej złożonych JSON strukturę i podaje kilka ładnych wyjaśnień na temat parametru object_hook
. Istnieje również inna odpowiedź, która rekursywnie przyjmuje wynik wywołania json.loads()
i konwertuje wszystkie ciągi znaków Unicode na ciągi bajtów.
11
A jeśli obiekt JSON jest mieszanką typów danych nie tylko Unicode ciągi, można użyć tego wyrażenia:
def ascii_encode_dict(data):
ascii_encode = lambda x: x.encode('ascii') if isinstance(x, unicode) else x
return dict(map(ascii_encode, pair) for pair in data.items())
Powiązane problemy
- 1. Python - Unicode do konwersji ASCII
- 2. Python: Konwersja kompleks słownika ciągów z Unicode do ASCII
- 3. Wymuszanie wersji python w setup.py
- 4. Python - Compress Ascii String
- 5. Jak uzyskać przepływ do pracy z alisem modułu Babel?
- 6. Wywołanie modułu Perla z Python
- 7. Python z dostępem do zagnieżdżonych danych JSON
- 8. Wymuszanie aplikacji/json Typ MIME w widoku (kolba)
- 9. python, pisanie Json do pliku
- 10. Python - Najlepsza biblioteka GUI do pracy?
- 11. Python: Przekazywanie łańcucha Unicode do modułu C++
- 12. dodanie nagłówka do modułu żądania python
- 13. Konwertuj z łańcucha ASCII zakodowanego w szesnastkowy na zwykły ASCII?
- 14. Instalowanie modułu Twitter Python
- 15. javascript-readable json z python
- 16. Zapisywanie wszystkich żądań z modułu python-request
- 17. Python Wyśmiewanie funkcji z zaimportowanego modułu
- 18. Przeczytaj plik json z python
- 19. Wymuszanie vimdiff do zawijania linii?
- 20. Python: napisz listę znaków spoza ASCII do pliku tekstowego
- 21. Przepływ pracy do pracy na widelcu github z biblioteki Pythona?
- 22. Wartość ASCII znaku w języku Python
- 23. Pierwsze jStorage do pracy
- 24. python żąda problemów z nazwami plików non ascii
- 25. poprawa szybkości importu modułu Python
- 26. Błąd podczas ładowania modułu pirodbc podczas pracy na Apache
- 27. Wymuszanie całych tygodni z apply.weekly()
- 28. Błąd: ansibl wymaga modułu json, żaden znaleziono
- 29. Python MySQL Eksport CSV do json dziwne kodowanie
- 30. Jak zmienić nazwę modułu Python?
proszę umieszczać swój rzeczywisty kod i wszelkie komunikaty o błędach otrzymujesz. Dziękuję Ci. – bernie
Co masz na myśli przez "w Unicode"? Czy mówisz o ucieczce znaków spoza ASCII do "\ u1234"? Jeśli tak, dlaczego to kodowanie nie jest akceptowalne? Jest to całkowicie poprawny JSON, który każdy parser musi zaakceptować; istnieją znaki, które * muszą * być zakodowane w tym formacie, nawet jeśli generalnie pozostawiasz znaki nie-ASCII bez zmiany znaczenia. – bobince
Ponieważ JSON natywnie jest w formacie utf-8. Json.loads() w języku Python akceptuje symbole inne niż ascii i przetwarza je na ciągi znaków Unicode. jsob.loads() przetwarza wszystkie łańcuchy znaków w typ "Pythona", a nie "str". Ale json.dumps() wymyka się ** wszystkim ** nie-ascii symboli! Tak, string! = Json.dumps (json.loads (string)) –