Tiếng Việt

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

Gỡ lỗi lỗi thụt lề YAML bằng cách chuyển đổi nó thành JSON

· Tại sao nó quan trọng

yaml json gỡ lỗi

Dòng YAML bị đặt sai vị trí được đánh dấu bên cạnh dấu ngoặc nhọn JSON rõ ràng
Hình minh họa vector ToolAcre gốc

YAML lỗi thụt lề thường tạo ra tệp hợp lệ có cấu trúc sai thay vì lỗi phân tích cú pháp. Bài đăng này cho thấy cách chuyển đổi sang JSON hiển thị chính xác những gì trình phân tích cú pháp hiểu, do đó, khóa bị đặt sai vị trí sẽ trở nên rõ ràng.

Bước chưa bao giờ chạy — một tệp quy trình công việc được phân tích cú pháp tốt và một khóa có kết thúc quá cao một cấp

Luồng công việc có thể phân tích cú pháp thành công khi đặt `with` bên cạnh một bước thay vì bên trong bước đó. Sau đó, người chạy sẽ bỏ qua hoặc từ chối hình dạng đó và việc kiểm tra trực quan sẽ bỏ lỡ sự thay đổi vì nguồn vẫn gọn gàng. Việc chuyển đổi sang JSON hiển thị phần tử gốc thực sự thông qua dấu ngoặc nhọn và ranh giới mảng.

ToolAcre báo cáo YAML không đúng định dạng với dòng và cột nhưng cấu trúc sai hợp lệ không tạo ra lỗi cú pháp. Do đó, cây được chuyển đổi là một dạng xem chẩn đoán: nó cho bạn biết những gì trình phân tích cú pháp này chấp nhận chứ không phải những gì lược đồ quy trình công việc dự định.

Tại sao lỗi thụt lề thường không phải là lỗi — cấu trúc của YAML là khoảng trắng, do đó, một dòng được dịch chuyển thường tạo ra một tài liệu hợp lệ nhưng khác

Khoảng trắng mang cấu trúc phân cấp YAML. Di chuyển một đường sang trái có thể biến một đứa trẻ thành anh chị em; di chuyển một dấu gạch ngang có thể đặt một mục vào một trình tự khác. Cả hai tài liệu đều có thể đáp ứng ngữ pháp YAML. Xác thực cú pháp không thể quyết định việc lồng nào phù hợp với ứng dụng.

Các tab thụt lề sẽ bị trình phân tích cú pháp từ chối và nhận được một vị trí. Thay vào đó, các không gian tạo ra hệ thống phân cấp hợp lệ sai sẽ yêu cầu so sánh cấu trúc. Sự khác biệt đó giải thích tại sao một số lỗi thụt lề không thành công ngay lập tức trong khi những lỗi khác vẫn tồn tại cho đến khi ứng dụng hoạt động.

Điều JSON làm rõ ràng — dấu ngoặc nhọn và dấu ngoặc nhọn hiển thị chính xác khóa thuộc về đối tượng nào

JSON ghi ranh giới đối tượng bằng dấu ngoặc nhọn và các thành viên mảng bằng dấu ngoặc nhọn. Khóa YAML bị đặt sai vị trí sẽ xuất hiện bên ngoài đối tượng mà bạn mong đợi và dấu gạch ngang trở thành ranh giới mảng khó có thể bỏ qua. Thụt lề trong JSON đẹp là cách trình bày; dấu câu xác định cấu trúc.

Chế độ xem cũng hiển thị các loại đã giải quyết. Một đại lượng vô hướng không trích dẫn có thể là null, số hoặc Boolean trong lược đồ đã chọn. Việc sửa hệ thống phân cấp mà không kiểm tra các giá trị có thể để lại lỗi thứ hai, vì vậy hãy so sánh cả đường dẫn thuộc tính và loại JSON.

Các dạng lỗi phổ biến — một mục trong danh sách không đúng cha mẹ, một khóa trở thành anh chị em thay vì con và các tab trộn lẫn với dấu cách

Các lỗi thường gặp bao gồm một mục trong chuỗi được căn chỉnh với danh sách sai, khóa ánh xạ bị lệch ra ngoài thành anh chị em và các ký tự tab bị trộn lẫn với dấu cách. Khóa trùng lặp là một cái bẫy khác: ToolAcre giữ giá trị cuối cùng và cảnh báo bằng một vị trí, vì vậy JSON chỉ chứa thuộc tính còn sót lại.

Điểm neo có thể làm cho kết quả trông lớn hơn vì bí danh mở rộng thành dữ liệu lặp lại. Điều đó được mong đợi cho chuyển đổi này và không nên nhầm lẫn với việc thụt lề ngẫu nhiên. Đọc cảnh báo trước khi quy mọi khác biệt về cấu trúc cho khoảng trắng.

Ví dụ đã hoạt động: quy trình làm việc CI có một khối 'với' thụt lề sai — chuyển đổi thành JSON, phát hiện khóa bị đặt sai vị trí, sửa và chuyển đổi lại

Tạo công việc được sắp xếp lại với `steps`, một mục nhập `uses` và ánh xạ `with`. Nhô ra `with` để nó trở thành anh em của `steps`, sau đó chuyển đổi. Cặp ngoặc nhọn JSON cho biết `with` thuộc về công việc chứ không phải đối tượng bước. Di chuyển nó dưới mục danh sách và chuyển đổi lại để xem cách lồng dự định.

Ví dụ này tránh xác nhận cách thức phản hồi của một dịch vụ CI cụ thể vì trình chuyển đổi không tải lược đồ đó. Bằng chứng là hệ thống phân cấp được phân tích cú pháp. Việc xác thực lược đồ phải tuân theo và sau đó có thể báo cáo liệu `with` có được chấp nhận ở đường dẫn đã sửa hay không.

Sử dụng chuyển đổi ngược lại — JSON thành YAML để tạo phiên bản thụt lề chính xác mà bạn có thể dán lại

Sau khi cấu trúc JSON chính xác, việc chuyển đổi cấu trúc đó trở lại YAML sẽ tạo ra mức thụt lề nhất quán từ trình tuần tự hóa. Các chuỗi không rõ ràng có thể nhận được dấu ngoặc kép và nhận xét không được khôi phục. Xử lý đầu ra dưới dạng tuần tự hóa dữ liệu sạch, không phải là trình định dạng bảo toàn nguồn.

Nếu các nhận xét ban đầu giải thích các lựa chọn vận hành, hãy sao chép cấu trúc đã sửa vào tệp được duy trì thay vì thay thế nó một cách mù quáng. Một tệp được tạo có thể có cấu trúc đúng và không đầy đủ về mặt biên tập.

Điều này không bao gồm - xác thực ngữ nghĩa đối với quy trình công việc hoặc lược đồ tệp kê khai, giúp tìm ra các khóa không xác định thay vì các khóa bị đặt sai vị trí

Không có quy trình làm việc, Compose, Kubernetes hoặc lược đồ ứng dụng nào liên quan. Một khóa có thể nằm dưới khóa chính dự định và vẫn bị sai chính tả hoặc không được hỗ trợ. Trình chuyển đổi cú pháp chỉ chứng minh rằng YAML được chấp nhận và hiển thị giá trị có hình JSON thu được.

Sử dụng trình xác thực của nền tảng sở hữu để tìm các khóa không xác định, các trường bắt buộc và các ràng buộc về ngữ nghĩa. Việc tách riêng các kiểm tra cú pháp và lược đồ sẽ tạo ra các lỗi rõ ràng hơn và tránh ghi nhận một trình chuyển đổi chung có kiến ​​thức về miền mà nó không có.

Bài học rút ra: khi YAML có vẻ đúng và hoạt động sai, hãy coi đó là JSON — và cách bảng điều khiển Trình chuyển đổi cú pháp thực hiện điều đó ngay lập tức

Khi YAML có vẻ đúng nhưng hoạt động sai, hãy kiểm tra cây được phân tích cú pháp. JSON dấu ngoặc nhọn và dấu ngoặc nhọn làm rõ nguồn gốc, trong khi cảnh báo của ToolAcre hiển thị các nội dung trùng lặp, luồng và các thay đổi về giá trị có thể làm phức tạp hình ảnh.

Sửa một lỗi phân cấp, chuyển đổi lại rồi chạy xác thực lược đồ. Trình tự này biến sự nghi ngờ về khoảng trắng vô hình thành cấu trúc có thể quan sát được mà không tuyên bố rằng việc chuyển đổi thành công sẽ khiến cấu hình hợp lệ cho đích đến của nó.

Khi so sánh trước và sau, hãy tập trung vào đường dẫn thuộc tính thay vì số dòng vì việc tuần tự hóa có thể sắp xếp lại thứ tự trình bày hoặc thêm dấu ngoặc kép. Đánh giá hữu ích liệt kê đường dẫn dự kiến, loại JSON của nó và liệu nó có nằm trong một đối tượng hay mảng hay không. Danh sách kiểm tra nhỏ đó phát hiện khóa thứ hai bị thất lạc ngay cả khi dấu hiệu hình ảnh đầu tiên đã được khắc phục và nó tránh chuyển định dạng YAML được tạo thành lời tiên tri kiểm tra.