Tiếng Việt

Công cụ dành cho nhà phát triển · Trình chuyển đổi cú pháp

Chuyển đổi JSON thành XML: phần tử gốc, mảng và tên thẻ không hợp lệ

· Cách thức hoạt động

json xml data-formats

Một mảng JSON không có gốc nhập vào một trình bao bọc XML với các mục con lặp lại
Hình minh họa vector ToolAcre gốc

JSON có thể là một mảng trống với các khóa bắt đầu bằng chữ số hoặc chứa dấu cách, không có khóa nào trong số đó XML cho phép. Bài đăng này giải thích các quyết định mà một trình chuyển đổi phải đưa ra về gốc, mảng và tên để bạn có thể dự đoán kết quả.

Mảng không có tên — mảng JSON cấp cao nhất phải trở thành tài liệu XML một gốc và phần tử bao bọc xuất hiện

JSON có thể bắt đầu bằng `[1,2]`; XML không thể bắt đầu bằng hai thành phần tài liệu ngang hàng. ToolAcre do đó bao bọc một mảng gốc trong tên gốc đã chọn và viết mỗi thành viên dưới dạng một phần tử con `<item>` lặp lại. Tên cảnh báo quy ước đó, vì tên trình bao bọc và mục không có trong nguồn.

Việc chọn `numbers` mang lại một phần tử tài liệu `<numbers>` chứa hai phần tử mục. Việc chuyển đổi mang tính xác định nhưng không chuẩn: hệ thống khác có thể yêu cầu `<number>` hoặc bộ sưu tập mang thuộc tính. Đặt gốc một cách có chủ ý và so sánh kết quả với hợp đồng XML được yêu cầu của người nhận.

XML cần chính xác một gốc — tại sao mọi chuyển đổi đều phát minh hoặc yêu cầu tên thành phần gốc

Tài liệu XML phải có chính xác một phần tử gốc. Một đối tượng JSON có chính xác một khóa cấp cao nhất thông thường có thể sử dụng trực tiếp khóa đó. Đối tượng nhiều khóa, mảng, vô hướng hoặc null không có tên được cung cấp duy nhất, do đó người viết đặt nó trong `root` trừ khi người dùng cung cấp tên hợp pháp khác.

Quy tắc trình bao bọc được triển khai trước khi tuần tự hóa và hiển thị dưới dạng cảnh báo. Nó không được lược đồ phát hiện và không khẳng định rằng `<root>` có ý nghĩa đối với dịch vụ cũ. Đặt tên cho đường bao là một phần của thiết kế tích hợp, trong khi trình chuyển đổi chỉ đảm bảo cấu trúc được định dạng tốt dưới ánh xạ của chính nó.

Mảng không có XML tương đương — lặp lại một phần tử trên mỗi mục và cách biểu diễn mảng vô hướng và mảng mảng

Mảng trở thành các phần tử lặp lại. Tại thư mục gốc của tài liệu, các thành viên sử dụng `<item>` bên dưới lớp bao bọc. Bên trong một đối tượng, một mảng được lưu trữ trong `line` sẽ trở thành anh em `<line>` lặp lại. Mảng đối tượng tạo các phần tử lặp lại với các trường con; các mảng lồng nhau không có tên miền và kế thừa cấu trúc chung do trình tạo tạo ra.

Điều này làm mất đi sự khác biệt giữa một thành viên mảng và một đại lượng vô hướng có cùng tên phần tử sau lần đọc XML-to-JSON sau này. XML cung cấp các lần xuất hiện, không phải là điểm đánh dấu mảng độc lập. Nếu lượng số ổn định có vấn đề thì lược đồ hoặc ánh xạ ứng dụng phải cung cấp nó; một trình tuần tự hóa chung không thể chứng minh điều đó chỉ từ các tên phần tử có hình dạng JSON.

Khóa không thể là tên thành phần — tên bắt đầu bằng một chữ số, chứa dấu cách hoặc dấu chấm câu hoặc bắt đầu bằng 'xml' và cách trình chuyển đổi đổi tên hoặc thoát chúng

Các trình chuyển đổi được đề xuất phác thảo có thể đổi tên hoặc thoát khỏi các khóa không hợp lệ. ToolAcre từ chối họ một cách rõ ràng. Một khóa có dấu cách, một khóa bắt đầu bằng chữ số hoặc dấu gạch nối hoặc một khóa bắt đầu bằng các chữ cái dành riêng `xml` sẽ kích hoạt `UNSUPPORTED_SHAPE` và đặt tên cho đường dẫn vi phạm. Việc đổi tên thầm lặng sẽ tạo ra XML không khớp với lược đồ nào đã được thống nhất.

Tên hợp lệ có thể bắt đầu bằng một chữ cái, dấu gạch dưới hoặc tiền tố kiểu không gian tên và có thể chứa các chữ số, dấu chấm, dấu gạch dưới, dấu hai chấm và dấu gạch nối sau khi bắt đầu. Khóa thuộc tính chỉ sử dụng `@` làm quy ước JSON; tên thuộc tính còn lại phải vượt qua bước kiểm tra tương tự. Đổi tên khóa nguồn có chủ ý hoặc chọn định dạng đích khác.

Các khóa không thể là tên thành phần sẽ bị từ chối, không bao giờ được đổi tên hoặc thoát

Các số và boolean được tuần tự hóa dưới dạng văn bản phần tử, vì vậy loại JSON của chúng không còn được khai báo bởi XML nữa. Do đó, trình đọc ngược mặc định sẽ trả về các chuỗi. Null không có biểu diễn XML ở đây: nó trở thành một phần tử trống, không thể phân biệt được với một chuỗi trống và người viết báo cáo số lượng giá trị đã trải qua sự thay đổi đó.

Điều này có nghĩa là `{ "a": null, "b": "" }` có thể tạo ra hai phần tử trống có khả năng đọc giống nhau. Gọi chuyến đi khứ hồi đó là không mất mát sẽ là sai. Các thuộc tính `#text` và `#cdata` giữ nguyên quy ước cấu trúc của trình chuyển đổi nhưng chúng không thêm hệ thống loại XML chung.

Các loại trở thành văn bản XML, trong khi null trở thành sự mơ hồ về phần tử trống được thừa nhận

Sử dụng `{"order":{"@id":"A-7","customer":"Ada","line":[{"sku":"P1","qty":2},{"sku":"P2","qty":1}],"note":null}}`. Khóa `order` duy nhất trở thành gốc, `@id` trở thành thuộc tính, mỗi đối tượng dòng trở thành `<line>` lặp lại và null trở thành `<note></note>` trống kèm theo cảnh báo.

Đọc lại kết quả khi suy luận bị vô hiệu hóa. Các giá trị id, số lượng và văn bản thuộc tính là các chuỗi và dòng là một mảng vì nó xuất hiện hai lần. Điều này thể hiện nghịch đảo được hỗ trợ chính xác trong khi hiển thị các kiểu số và null bị mất. Lược đồ lệnh nhận có thể yêu cầu các tên hoặc thứ tự khác mà ví dụ này không xác thực.

Điều này không bao gồm những gì - tạo ra XML khớp với XSD hoặc không gian tên nhất định, cần ánh xạ được viết bằng tay

Người viết không sử dụng XSD, gán URI vùng tên hoặc quyết định thứ tự phần tử từ lược đồ kinh doanh. Nó viết một khai báo XML và không bao giờ phát ra DOCTYPE. Các khóa chứa tiền tố vùng tên được giữ nguyên theo nghĩa đen, nhưng đó không phải là độ phân giải vùng tên hoặc bằng chứng cho thấy tiền tố được khai báo chính xác.

Việc tạo XML được một dịch vụ cụ thể chấp nhận có thể yêu cầu các thuộc tính, ràng buộc trình tự, nhóm lựa chọn và tên đủ điều kiện. Sử dụng lược đồ hoặc tài liệu hiện tại của nó để xây dựng ánh xạ đó. Chuyển đổi chung phù hợp cho việc kiểm tra và các tài liệu tập trung vào dữ liệu đơn giản, không thể thay thế cho việc xê-ri hóa nhận biết hợp đồng.

Bài học rút ra: dự đoán hình dạng trước khi bạn phụ thuộc vào nó — và cách bảng chuyển đổi Cú pháp hiển thị cấu trúc XML mà tài liệu JSON tạo ra

Dự đoán phong bì, tên vật phẩm và loại mất trước tùy thuộc vào kết quả. ToolAcre bao bọc các giá trị thiếu một gốc, lặp lại mảng, ánh xạ các khóa `@` tới các thuộc tính, thay thế giá trị rỗng bằng văn bản trống và từ chối các tên không hợp lệ thay vì đoán các tên thay thế. Mọi thay đổi không rõ ràng đều xuất hiện ở đầu ra hoặc cảnh báo.

Kiểm tra đối tượng nhỏ nhất bao gồm mảng cấp cao nhất, bản ghi lặp lại, giá trị rỗng, văn bản số và khóa khó sử dụng. Việc từ chối là bằng chứng hữu ích cho thấy việc lập bản đồ thủ công là cần thiết. Một tệp thành công vẫn cần được người nhận thực tế xác thực vì XML được định dạng đúng và XML hợp lệ theo lược đồ là các xác nhận quyền sở hữu khác nhau.

Sau khi bộ thu chấp nhận mẫu, chỉ thực hiện kiểm tra ngược ở những nơi ánh xạ dự kiến ​​sẽ tồn tại. Các thuộc tính và phần tử con lặp lại có thể khứ hồi theo quy ước riêng của ToolAcre, trong khi các loại null và vô hướng thì không thể. Việc ghi lại sự khác biệt đó sẽ ngăn không cho một ví dụ về đường dẫn hạnh phúc thành công được khái quát hóa cho mọi tài liệu đơn hàng mà quá trình tích hợp của bạn có thể tạo ra.