Hướng dẫn serialize and unserialize in javascript - serialize và unserialize trong javascript
Tôi có nhiều đối tượng JavaScript trong ứng dụng của mình, một cái gì đó như: Show
Xem trong JS Fiddle. Câu hỏi của tôi là: Có một thực hành/mẫu/mẹo tốt nhất để khôi phục đối tượng của tôi theo cùng loại trước khi tuần tự hóa (trường hợp của người lớp, trong trường hợp này)? Yêu cầu mà tôi có:
Đã hỏi ngày 27 tháng 6 năm 2011 lúc 0:39Jun 27, 2011 at 0:39
ToperatoperaTopera 12K15 Huy hiệu vàng66 Huy hiệu bạc101 Huy hiệu đồng15 gold badges66 silver badges101 bronze badges 2 JSON không có chức năng như các loại dữ liệu. Bạn chỉ có thể tuần tự hóa chuỗi, số, đối tượng, mảng và booleans (và 9)Bạn có thể tạo phương thức 0 của riêng mình, chỉ truyền dữ liệu thực sự phải được tuần tự hóa:
Tương tự để giải phóng:
Việc sử dụng sẽ là:
Để giảm số lượng công việc, bạn có thể xem xét để lưu trữ tất cả các dữ liệu cần được tuần tự hóa trong một thuộc tính "dữ liệu" đặc biệt cho mỗi ví dụ 1. Ví dụ:
Sau đó, tuần tự hóa và giải phóng hóa chỉ đơn thuần là gọi 2 và đặt dữ liệu của một thể hiện sẽ là 3.Điều này sẽ giữ cho các phương thức 0 và 5 đơn giản nhưng bạn phải điều chỉnh các chức năng khác của mình.Lưu ý bên: Bạn nên thêm phương thức 6 vào nguyên mẫu của hàm:
Mặt khác, mọi trường hợp đều có ví dụ riêng của chức năng đó cũng làm tăng bộ nhớ.
Flimzy 70.9K15 Huy hiệu vàng133 Huy hiệu bạc171 Huy hiệu đồng15 gold badges133 silver badges171 bronze badges Đã trả lời ngày 27 tháng 6 năm 2011 lúc 0:47Jun 27, 2011 at 0:47
Felix Klingfelix KlingFelix Kling 774K172 Huy hiệu vàng1069 Huy hiệu bạc1116 Huy hiệu đồng172 gold badges1069 silver badges1116 bronze badges 14 Tôi đã viết serialijse vì tôi phải đối mặt với vấn đề tương tự như bạn.serialijse because I faced the same problem as you. Bạn có thể tìm thấy nó tại https://github.com/erossignon/serialijse Nó có thể được sử dụng trong NodeJS hoặc trong trình duyệt và có thể phục vụ để tuần tự hóa và giảm dần một tập hợp các đối tượng phức tạp từ một bối cảnh (NODEJS) sang bảng khác (trình duyệt) hoặc ngược lại.
Đã trả lời ngày 24 tháng 10 năm 2014 lúc 6:18Oct 24, 2014 at 6:18
EtienneetienneEtienne 15.2k3 Huy hiệu vàng24 Huy hiệu bạc31 Huy hiệu đồng3 gold badges24 silver badges31 bronze badges 4 Tôi là tác giả của https://github.com/joonhocho/seri. SERI là hỗ trợ lớp JSON + Custom (lồng nhau). Bạn chỉ cần cung cấp 7 và 8 để tuần tự hóa và giải phóng bất kỳ trường hợp lớp nào.Đây là một ví dụ với các đối tượng lớp lồng nhau:
Hy vọng nó giúp giải quyết vấn đề của bạn. Đã trả lời ngày 23 tháng 6 năm 2016 lúc 23:27Jun 23, 2016 at 23:27
JoonjoonJoon 8.8465 huy hiệu vàng46 Huy hiệu bạc74 Huy hiệu đồng5 gold badges46 silver badges74 bronze badges API JSON gốc của trình duyệt có thể không cung cấp cho bạn chức năng IDOLD của bạn sau khi bạn gọi JSON.
Sau đó, bạn có thể gọi
và bạn sẽ lấy lại chức năng của mình trong đối tượng JSON. Đã trả lời ngày 27 tháng 6 năm 2011 lúc 16:32Jun 27, 2011 at 16:32
T. Webstert. WebsterT. Webster 9.2856 huy hiệu vàng64 Huy hiệu bạc94 Huy hiệu đồng6 gold badges64 silver badges94 bronze badges Tôi đã có cùng một vấn đề, và viết một công cụ nhỏ để thực hiện trộn lẫn dữ liệu và mô hình. Xem https://github.com/khayll/jsmix Đây là cách bạn sẽ làm điều đó: 0Nó có thể xử lý các đối tượng phức tạp, giống như các bộ sưu tập lồng nhau cũng đệ quy. Đối với việc tuần tự hóa các chức năng của JS, tôi sẽ không làm điều đó vì lý do bảo mật. Đã trả lời ngày 6 tháng 9 năm 2015 lúc 22:45Sep 6, 2015 at 22:45
Tôi đã thêm một repo serializer JavaScript khác vào GitHub. Thay vì thực hiện cách tiếp cận của các đối tượng JavaScript tuần tự hóa và giải phóng sang định dạng nội bộ, cách tiếp cận ở đây là để tuần tự hóa các đối tượng JavaScript ra JavaScript bản địa. Điều này có lợi thế là định dạng hoàn toàn bất khả tri từ chất tuần tự và đối tượng có thể được tái tạo đơn giản bằng cách gọi eval (). https://github.com/iconico/JavaScript-Serializer Đã trả lời ngày 9 tháng 1 năm 2019 lúc 1:59Jan 9, 2019 at 1:59
Nico Westerdalenico WesterdaleNico Westerdale 2.0861 Huy hiệu vàng24 Huy hiệu bạc31 Huy hiệu đồng1 gold badge24 silver badges31 bronze badges Tôi có một vấn đề tương tự và vì tôi không thể tìm thấy một giải pháp đầy đủ, tôi cũng đã tạo một thư viện tuần tự cho javascript: https://github.com/wavesoft/jbb (như một vấn đề thực tế là nó nhiều hơn một chút, vì nó chủ yếu dành cho tài nguyên bó) Nó gần với nhị phân-json nhưng nó bổ sung một vài tính năng bổ sung, chẳng hạn như siêu dữ liệu cho các đối tượng được mã hóa và một số tối ưu hóa thêm như sao chép dữ liệu, tham chiếu chéo với các gói khác và nén cấp cấu trúc. Tuy nhiên, có một điều bắt được: để giữ cho kích thước bó nhỏ, không có thông tin loại trong gói. Thông tin như vậy được cung cấp trong một "hồ sơ" riêng biệt mô tả các đối tượng của bạn để mã hóa và giải mã. Vì lý do tối ưu hóa thông tin này được đưa ra dưới dạng kịch bản. Nhưng bạn có thể làm cho cuộc sống của mình dễ dàng hơn khi sử dụng tiện ích 9 (https://github.com/wavesoft/gulp-jbb-profile) để tạo các tập lệnh mã hóa/giải mã từ các thông số kỹ thuật đối tượng YAML đơn giản như thế này: 1Ví dụ: bạn có thể có một cái nhìn trên hồ sơ 0. Khi bạn đã sẵn sàng hồ sơ của mình, bạn có thể sử dụng JBB như thế này: 2Và bạn có thể đọc lại như thế này: 3Đã trả lời ngày 1 tháng 6 năm 2016 lúc 23:53Jun 1, 2016 at 23:53
WaveyWaveyWavey Phù hiệu bằng đồng 3144 bronze badges
Bạn có thể tạo một thể hiện trống của lớp của bạn và gán các giá trị cho nó với 1. 4Đã trả lời ngày 14 tháng 3 lúc 8:47Mar 14 at 8:47
Tôi đã cố gắng làm điều này với 2 với bản địa ____ 33 ... 5Điều này nói gì? Nó nói rằng
6Đây là một klass có thể nối tiếp, với 7Tôi cũng đã cố gắng làm điều đó với đối tượng kiểu Mongo ( 5), nhưng nó đã thất bại trong 6. Cung cấp 7 không còn quan trọng nữa ...BTW, nếu bạn không quan tâm đến các thư viện, bạn có thể sử dụng 8 / 9 từ 0. Chỉ cần chắc chắn rằng bạn làm theo cách nguy hiểm.Đã trả lời ngày 11 tháng 2 năm 2020 lúc 16:56Feb 11, 2020 at 16:56
PolvpolvPolv 1.7541 Huy hiệu vàng17 Huy hiệu bạc31 Huy hiệu đồng1 gold badge17 silver badges31 bronze badges Tôi đã thực hiện một mô -đun NPM có tên Esserializer để giải quyết vấn đề này: Lưu các giá trị đối tượng lớp JavaScript trong quá trình tuần tự hóa, ở định dạng JSON đơn giản, mà không lưu trữ bất kỳ chức năng nào. Trong quá trình tuần tự hóa, chi phí duy nhất phát sinh là lưu thông tin tên lớp. Do đó, việc sử dụng đĩa được tối ưu hóa. Sau đó trong giai đoạn giải phóng hóa, Esserializer có thể đệ quy hóa thể hiện đối tượng, với tất cả các loại/chức năng thông tin được giữ lại. Nó hoạt động trong cả môi trường Trình duyệt và Node.js. Trong trường hợp của OP, mã sẽ khá dễ dàng: 8 1 là một ví dụ 1, chứa tất cả các giá trị/hàm/thông tin siêu cấp.Ước gì nó có thể giúp. Đã trả lời ngày 1 tháng 3 năm 2021 lúc 7:05Mar 1, 2021 at 7:05
Shaochuancsshaochuancsshaochuancs 14,5K3 Huy hiệu vàng 50 Huy hiệu bạc60 Huy hiệu Đồng3 gold badges50 silver badges60 bronze badges Sê -ri hóa và giải phóng hóa trong JavaScript là gì?Xét nghiệm hóa cấu trúc dữ liệu trong bộ nhớ và chuyển đổi nó thành một loạt các byte có thể được lưu trữ và chuyển giao. Việc giải phóng hóa mất một loạt các byte và chuyển đổi nó thành cấu trúc dữ liệu trong bộ nhớ có thể được tiêu thụ theo chương trình.
Sê -ri trong JavaScript là gì?Quá trình theo đó một cấu trúc đối tượng hoặc dữ liệu được dịch thành một định dạng phù hợp để chuyển qua mạng hoặc lưu trữ (ví dụ: trong một bộ đệm hoặc định dạng tệp mảng).Ví dụ, trong JavaScript, bạn có thể tuần tự hóa một đối tượng thành chuỗi JSON bằng cách gọi hàm JSON.chuỗi (). (e.g. in an array buffer or file format). In JavaScript, for example, you can serialize an object to a JSON string by calling the function JSON. stringify() .
Sê -ri là gì so với giảm dần là gì?Tuần tự hóa là quá trình chuyển đổi một đối tượng thành một luồng byte để lưu trữ đối tượng hoặc truyền nó đến bộ nhớ, cơ sở dữ liệu hoặc tệp.Mục đích chính của nó là lưu trạng thái của một đối tượng để có thể tạo lại nó khi cần thiết.Quá trình đảo ngược được gọi là khử deserialization.
Sự dập tắt trong JavaScript là gì?Quá trình theo đó một định dạng cấp thấp hơn (ví dụ: đã được chuyển qua mạng hoặc được lưu trữ trong một kho lưu trữ dữ liệu) được dịch thành một đối tượng có thể đọc được hoặc cấu trúc dữ liệu khác.Ví dụ, trong JavaScript, bạn có thể giảm bớt chuỗi JSON vào một đối tượng bằng cách gọi hàm JSON.Parse ().. In JavaScript, for example, you can deserialize a JSON string to an object by calling the function JSON. parse() . |