Tôi đang sử dụng json.dump() và json.load() để lưu/đọc từ điển chuỗi đến/từ đĩa. Vấn đề là tôi không thể có bất kỳ chuỗi nào trong unicode. Họ dường như được unicode không có vấn đề làm thế nào tôi đặt các tham số để dump/tải (bao gồm cả sure_ascii và mã hóa).Bắt buộc mô-đun json Python để làm việc với ASCII
15
A
Trả lời
20
Nếu bạn chỉ làm việc với các đối tượng JSON đơn giản, bạn có thể sử dụng như sau:
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)
Dưới đây là một ví dụ về cách thức hoạt động:
>>> 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 công trình cho một JSON phức tạp hơn cấu trúc và đưa ra một số giải thích tốt đẹp về tham số object_hook
. Ngoài ra còn có một câu trả lời ở đó đệ quy có kết quả của một cuộc gọi json.loads()
và chuyển đổi tất cả các chuỗi Unicode thành chuỗi byte.
11
Và nếu đối tượng json là một kết hợp của kiểu dữ liệu, không chỉ chuỗi unicode, bạn có thể sử dụng biểu thức này:
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())
Các vấn đề liên quan
- 1. Bắt ActivePython để làm việc với WSH
- 2. Làm 'tập tin' bắt buộc (bắt buộc)
- 3. Bắt Robolectric để làm việc với Volley
- 4. Bắt offline_access để làm việc với Facebook
- 5. Bắt python để làm việc, Lỗi Máy chủ Nội bộ
- 6. Xóa mã bắt buộc từ F # async dòng làm việc
- 7. ASP.NET Trường bắt buộc Validator không làm việc
- 8. làm việc với json trong oracle
- 9. Làm việc với python OAuth
- 10. Python - Nén chuỗi Ascii
- 11. Bắt webcam để làm việc trong OpenCV 2.3 với Cygwin
- 12. Bắt DbUnit để làm việc với giao dịch Hibernate
- 13. Bắt được "hg cam kết" để làm việc với Notepad ++
- 14. Bắt Cabal để làm việc với GHC 6.12.1
- 15. Bắt ActiveModel :: Gọi lại để làm việc với ActiveResource
- 16. mẫu ràng buộc với jquery ajax serialize không làm việc
- 17. Jackson - Tài sản bắt buộc?
- 18. Vẽ biểu đồ Python ASCII
- 19. python: làm việc với âm sắc Đức
- 20. jquery autocomplete không làm việc với dữ liệu JSON
- 21. Python bắt buộc đối với C++ nhà khai thác quá tải
- 22. Làm thế nào để có được ToolTip ràng buộc để làm việc với một ComboBox?
- 23. Bắt mô-đun python để làm việc cho một mô-đun được triển khai trong C
- 24. Làm cách nào để chỉ định trường bắt buộc?
- 25. Bắt buộc kiểm soát WPF để làm mới?
- 26. Python ràng buộc để ImageMagick
- 27. Bắt buộc làm mới hình nền
- 28. Làm cách nào để buộc WCF tự động tạo WSDL với các tham số phương thức bắt buộc (minoccurs = "1")?
- 29. Bắt buộc áp dụng/json loại MIME trong chế độ xem (Bình)
- 30. Làm thế nào để môđun hóa ứng dụng JSF/Facelets/Spring bằng OSGi?
Hãy gửi mã thực tế của bạn và bất kỳ thông báo lỗi bạn đang nhận được. Cảm ơn bạn. – bernie
Ý của bạn là gì trong “Unicode”? Bạn đang nói về việc thoát khỏi các ký tự không phải ASCII để thoát khỏi '\ u1234'? Nếu vậy tại sao mã hóa này không được chấp nhận? Đó là JSON hoàn toàn hợp lệ mà bất kỳ trình phân tích cú pháp nào cũng phải chấp nhận; có các ký tự mà * phải * được mã hóa ở định dạng này ngay cả khi nói chung bạn đang để lại các ký tự không phải ASCII không thoát. – bobince
Vì JSON nguyên bản là định dạng utf-8. Hàm json.loads() của Python chấp nhận các ký hiệu không phải ascii và phân tích chúng thành các chuỗi Unicode. jsob.loads() phân tích tất cả các chuỗi thành kiểu 'unicode' Python, không phải là 'str'. Nhưng json.dumps() thoát ** tất cả các ký hiệu không phải ascii **! Vì vậy, string! = Json.dumps (json.loads (string)) –