Chuyển đổi từ CSV sang YAML

YAML chính là định dạng được sử dụng trong hầu hết các tệp cấu hình hiện đại: manifest của Kubernetes, quy trình làm việc của GitHub Actions, Docker Compose, playbook của Ansible và các tiện ích trong Rails. Công cụ chuyển đổi này đọc dữ liệu từ tệp CSV và tạo ra một chuỗi văn bản YAML, trong đó mỗi dòng tương ứng với một mục đối chiếu được xác định bởi dòng tiêu đề. Kết quả đầu ra sử dụng cách thụt lề hai khoảng trắng và ngưỡng hiển thị nội tuyến ở 4 cấp độ – phù hợp với phong cách của hầu hết các trình soạn thảo và công cụ kiểm tra mã nguồn.

Làm thế nào để chuyển đổi định dạng CSV thành YAML

  1. 1

    Dán tệp CSV

    Một mẫu đã được tải sẵn để bạn có thể xem hình dạng đầu ra mặc định; hãy thay thế nó bằng dữ liệu của bạn.

  2. 2

    Chọn ký tự phân cách

    Ký hiệu phân cách mặc định là dấu phẩy. Để nhập dữ liệu được tách bằng tab, hãy sử dụng `\t` hoặc bất kỳ ký tự đơn nào khác mà tệp của bạn sử dụng.

  3. 3

    Các đầu mục trở thành khóa

    Dòng thứ nhất được coi là phần tiêu đề. Các dòng dữ liệu trở thành các bản ánh xạ dưới các khóa này theo đúng thứ tự của các cột nguồn.

  4. 4

    YAML được xuất ra một cách an toàn

    Kết quả được hiển thị bởi thành phần Symfony YAML; thành phần này sẽ đặt giá trị trong ngoặc kép khi xảy ra sự mơ hồ liên quan đến các giá trị logic (booleans), số hoặc ngày tháng.

Những đặc điểm kỳ lạ của YAML mà bạn cần biết trước khi dán kết quả đầu ra

YAML nổi tiếng là rất khoan dung về mặt bề ngoài nhưng lại chứa đầy những bí ẩn ngầm sâu bên trong. Công cụ lưu dữ liệu có thể xử lý hầu hết các vấn đề này, tuy nhiên dữ liệu của bạn vẫn cần phải trải qua quá trình truyền tải qua lại giữa hệ thống.

Vấn đề Na Uy và những người bạn

YAML 1.1 coi các giá trị no, yes, on, off, true, false, y, n (cùng các dạng viết hoa tương ứng) là các giá trị boolean. Điều này có nghĩa là một cột mã quốc gia với giá trị NO cho Na Uy có thể tự động chuyển thành false mà không cần xử lý thêm.

Ô nguồn Xuất ra dưới dạng (không đặt trong dấu ngoặc) Ý nghĩa thường được mong đợi
NO false Quốc gia Na Uy
ON true Tiểu bang Ontario
123 123 Số hoặc mã định danh
0100 64 (hệ bát phân!) Mã có chữ số 0 ở đầu

Bộ chuyển đổi định dạng tự động đưa các giá trị có nguy cơ vào dấu ngoặc kép; tuy nhiên, nếu bạn nhận thấy các loại dữ liệu không đúng trong kết quả đầu ra, hãy chuyển sang sử dụng bộ phân tích YAML phiên bản 1.2 ở phía sau quy trình xử lý hoặc rõ ràng đặt các giá trị quan trọng vào dấu ngoặc kép.

Các tùy chọn định dạng

  • Đoạn lõm hai khoảng trắng: Tiêu chuẩn phổ biến trong hầu hết các trình soạn thảo; các công cụ như yamllint mặc định sử dụng chế độ này.
  • Ngưỡng nội tuyến 4: Các cấu trúc lồng sâu sẽ được in trên một dòng ở cấp dưới thứ 4; nếu vượt quá cấp này thì sẽ mở rộng thành nhiều dòng. Hãy điều chỉnh phần tiếp theo nếu bạn muốn các khối có cấu trúc chặt chẽ hơn.
  • Các điểm neo và tên giả không được tạo ra. Mỗi dòng đều là một bản ánh xạ mới, ngay cả khi các dòng trùng lặp nhau.

Ví dụ về kết quả đầu ra

- name: Alice
  age: 30
- name: Bob
  age: 25

Khi nào nên chọn YAML thay vì JSON

  • Các tệp cấu hình được chỉnh sửa thủ công, nơi chú thích và chuỗi nhiều dòng có vai trò quan trọng.
  • Manifest của Kubernetes, quy trình CI và playbook của Ansible.
  • Bất kỳ tình huống nào mà con người đọc tệp nhiều ngang với máy móc.

Ngoài ra, JSON nghiêm ngặt hơn và phân tích nhanh hơn, hãy ưu tiên JSON cho các định dạng truyền dữ liệu và payload được tạo tự động.

Câu hỏi thường gặp

YAML 1.1 diễn giải giá trị NO nguyên dạng như một giá trị boolean. Bộ chuyển đổi sẽ đặt các giá trị có nguy cơ trong dấu ngoặc kép; tuy nhiên, nếu bộ phân tích tiếp theo vẫn yêu cầu xác định kiểu dữ liệu, hãy đặt các ô có vấn đề vào dấu ngoặc trước khi dán kết quả, hoặc chuyển sang sử dụng bộ phân tích YAML 1.2 – loại bộ phân tích này xử lý những giá trị này như các chuỗi văn bản thông thường.

Không thể sử dụng bộ chuyển đổi này, mỗi hàng sẽ trở thành một bản ánh xạ phẳng. Đối với các tệp YAML có cấu trúc lồng nhau, hãy viết một script nhỏ dựa trên thư viện YAML, hoặc trước tiên chuyển định dạng sang JSON rồi chỉnh sửa trong trình soạn thảo JSON.

Các ô dữ liệu được phân tích bằng công cụ str_getcsv sử dụng dấu phân cách bạn chọn. Các giá trị được đặt trong ngoặc kép sẽ giữ nguyên các dấu phân cách nội tại và được xử lý theo đúng cách như trong một trình phân tích CSV thực tế.

Có. Tệp CSV bạn dán vào sẽ được gửi đến máy chủ của chúng tôi, vì quá trình phân tích và chuyển thành định dạng YAML được thực hiện tại đó. Dữ liệu chỉ được dùng để tạo kết quả YAML và không được lưu trữ.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác