2010-06-18 45 views
10

Tôi có điều này:JSON.parse chuỗi với dấu ngoặc kép

JSON.parse('{"130.00000001":{"p_cod":"130.00000001","value":"130.00000001 HDD Upgrade to 2x 250GB HDD 2.5\" SATA2 7200rpm"}}'); 

JSONLint nói đó là json hoàn toàn hợp lệ. Nhưng khi thực hiện tôi có lỗi JSON.parse.

Nhưng, nếu tôi thay đổi mã của tôi để:

JSON.parse('{"130.00000001":{"p_cod":"130.00000001","value":"130.00000001 HDD Upgrade to 2x 250GB HDD 2.5\\" SATA2 7200rpm"}}'); 

(lưu ý các dấu chéo ngược kép)

Nó hoạt động, nhưng bây giờ JSONLint nói invalid json.

Ai đó có thể giúp hiểu hành vi này không?

+2

Có vẻ như đơn giản đối với tôi. Jsonlint bị hỏng;) – Wolph

+0

Chuỗi đầu vào đó đến từ đâu? nó có được tạo bởi bộ mã hóa JSON không? – paullb

+0

@paullb không có biến số PHP $ _POST. – mjsilva

Trả lời

15

Đó là sự khác biệt giữa định dạng dây và nội dung bạn phải viết trong mã của mình để lấy định dạng dây. Khi bạn khai báo mã này, bạn cần double- \ in literal để chuỗi nhận được một dấu gạch chéo ngược (nếu không nó sẽ giải thích \ "như một chuỗi thoát cho việc khai báo" và đặt chuỗi đó vào trong chuỗi của bạn). Nếu bạn in ra giá trị của chữ, bạn sẽ thấy một dấu gạch chéo ngược duy nhất.

+0

Tks Dean, tôi nghĩ rằng tôi đã đầu tiên thoát khỏi javascript và sau đó là JSON. Vì vậy, giả sử điều này là đến từ PHP như thế nào tôi có thể "tăng gấp đôi" thoát nó: Tôi đã thử này: str_replace ('\ "', '\\"', $ json) nhưng nó không hoạt động. – mjsilva

+9

OK: str_replace ('\\ "', '\\\\' ', $ json) Hôm nay tôi biết rằng cũng có một địa ngục thoát :) – mjsilva

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