2011-11-04 27 views
7

Trong Django mẫu tôi đã in ra dữ liệu như thế này:JSON phân tích cú pháp - báo giá duy nhất bên trong tên

P.place = '{{place.json|safe}}'; 

Sau đó, trong tập tin JavaScript Tôi gọt nó như thế:

place = JSON.parse(P.place); 

Tất cả mọi thứ là tốt cho dữ liệu như thế:

{"category": "Cars", "name": "Z"} 

Do chuỗi trông giống như rằng:

P.place = '{"category": "Cars", "name": "Z"}' 

Vì vậy, tôi có thể phân tích cú pháp bằng cách sử dụng JSON.parse phương thức phù thủy chấp nhận chuỗi là đầu vào.

Vấn đề là khi tôi nhận được dữ liệu như thế:

{"category": "Cars", "name": "Wojtek's Z"} 

Bởi vì so với chuỗi đầu vào cho JSON phân tích cú pháp trông như thế:

'{"category": "Cars", "name": "Wojtek' 

tôi không thể thoát khỏi dấu nháy đơn trong JSON chuỗi, vì sau đó JSON chuỗi trở thành không hợp lệ. Từ cùng một lý do, tôi không thể thay thế dấu ngoặc kép xung quanh bằng cách tăng gấp đôi và thoát khỏi dấu ngoặc kép trong chuỗi JSON.

Giải pháp của tôi trông như thế:

Trong template HTML:

P.place = {{place.json|safe}}; 

Sau đó trong JavaScript

var place = JSON.stringify(P.place); 
place = JSON.parse(place); 

Nó hoạt động, nhưng nó không phải là tối ưu giải pháp IMHO.

Làm thế nào để giải quyết vấn đề này theo cách cleaver hơn?

+0

Bạn PHẢI báo giá dấu nháy trong JSON, không có cách nào xung quanh điều đó. Nhưng thông thường bạn có thể thoát khỏi nó, nếu định nghĩa đối tượng bằng cách sử dụng "\" ". Hoặc nếu bạn thích, thoát unicode \ u0027 (tôi nghĩ). – StaxMan

+0

Bạn không thể làm điều đó, hãy xem jsonlint.com và json.org –

+0

Bạn không thể làm gì? Kiểm tra đặc tả json. – StaxMan

Trả lời

8

tôi có thể nghĩ đến hai khả năng:

Tạo một yếu tố kịch bản kiểu application/json, bơm dữ liệu mẫu của bạn vào nó, sau đó đọc dữ liệu của nó, ví dụ.

<script id="place-json" type="application/json"> 
    {{place.json|safe}} 
</script> 
<script type="application/javascript"> 
    P.place = $('#place-json').text(); 
</script> 

Hoặc, thoát khỏi dấu nháy đơn theo cách thủ công trước khi tiêm chuỗi, ví dụ:

simplejson.dumps(yourdata).replace("'", r"\'") 
+0

Cảm ơn bạn đã trả lời! Tuy nhiên tôi nghĩ rằng giải pháp này là chi phí cao hơn sau đó tôi. BTW, chúng tôi không thể sử dụng id trong phần tử script. –

+0

Tại sao bạn không thể sử dụng id bên trong phần tử tập lệnh? –

+0

http://stackoverflow.com/questions/2741441/giving-the-script-tag-an-id để biết thông tin về id trong phần tử tập lệnh. Ngoài ra tôi nghi ngờ hoặc là ít chi phí hơn so với việc xâu chuỗi và sau đó phân tích lại JSON, mặc dù bạn nên tất nhiên là điểm chuẩn và xem. –

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