2010-01-27 62 views
24

Tôi đang gửi thông tin giữa máy khách và máy chủ Django, và tôi muốn sử dụng JSON cho điều này. Tôi đang gửi thông tin đơn giản - danh sách các chuỗi. Tôi đã thử sử dụng django.core.serializers, nhưng khi tôi đã làm, tôi nhận đượcDanh sách tuần tự hóa thành JSON

AttributeError: 'str' object has no attribute '_meta' 

Có vẻ như điều này chỉ có thể được sử dụng cho các đối tượng Django. Làm thế nào tôi có thể tuần tự hóa các đối tượng đơn giản, Python?

+2

Bạn có thể bao gồm một đoạn mã thực tế mà bạn đã sử dụng đã tạo ra lỗi này không? –

Trả lời

46

Bạn có thể sử dụng Python tinh khiết để làm điều đó:

import json 
list = [1, 2, (3, 4)] # Note that the 3rd element is a tuple (3, 4) 
json.dumps(list) # '[1, 2, [3, 4]]' 
+2

Ồ, đó là một mô-đun mới trong 2.6, tôi không phải sử dụng simplejson. Cảm ơn rất nhiều :-) – gruszczy

+0

Tôi chỉ đơn giản là không thể phân tích cú pháp tệp JSON được đổ, bởi vì trong tệp này, JSON_ARRAY là con trực tiếp của một JSON_ARRAY khác. –

4

Nếu sử dụng Python 2.5, bạn có thể cần phải nhập khẩu simplejson:

try: 
    import json 
except ImportError: 
    import simplejson as json 
2

Có, nhưng sau đó bạn sẽ làm gì về django các đối tượng? json đơn giản có xu hướng sặc trên chúng.

Nếu các đối tượng là đối tượng mô hình cá nhân (không queryset, ví dụ), tôi đã thỉnh thoảng lưu trữ các loại mô hình đối tượng và các vn, như vậy:

seralized_dict = simplejson.dumps(my_dict, 
        default=lambda a: "[%s,%s]" % (str(type(a)), a.pk) 
        ) 

để de-serialize, bạn có thể tái tạo lại đối tượng được tham chiếu với model.objects.get(). Điều này không giúp ích nếu bạn quan tâm đến các chi tiết đối tượng ở loại dict được lưu trữ, nhưng nó có hiệu quả nếu tất cả những gì bạn cần biết là đối tượng nào có liên quan.

Các vấn đề liên quan