2015-05-13 14 views
10

Về cơ bản cố gắng một cái gì đó trong yaml mà có thể được thực hiện bằng json này:Xây dựng một mảng các mục từ điển trong YAML?

{ 
models: 
[ 
    { 
    model: "a" 
    type: "x" 
    #bunch of properties... 
    }, 
    { 
    model: "b" 
    type: "y" 
    #bunch of properties... 
    } 
] 
} 

Cho đến nay đây là những gì tôi có, nó không hoạt động bởi vì tôi đang lặp lại chính model của tôi nhưng những gì có thể là một cách thích hợp để làm điều đó bằng cách giữ từ khóa model đó?

models: 
model: 
    type: "x" 
    #bunch of properties... 
model: 
    type: "y" 
    #bunch of properties... 
+1

các bạn đã thử tải mã JSON của bạn thành một cấu trúc dữ liệu có nguồn gốc (bằng ngôn ngữ của bạn lựa chọn), sau đó sử dụng thư viện YAML để sắp xếp cấu trúc đó? Luôn luôn dễ dàng hơn để cho máy làm công việc cho bạn. :) –

Trả lời

36

Sử dụng một dấu gạch ngang để bắt đầu một yếu tố danh sách mới:

models: 
- model: "a" 
    type: "x" 
    #bunch of properties... 
- model: "b" 
    type: "y" 
    #bunch of properties... 
15

Bạn có thể đã được tìm kiếm tại YAML quá lâu vì rằng những gì bạn gọi JSON trong bài viết của bạn không phải là, nó là nhiều một nửa và một nửa của YAML và JSON. Cho phép bỏ qua thực tế là JSON không cho phép bình luận bắt đầu với một #, bạn nên trích dẫn chuỗi là chìa khóa và bạn nên đặt , giữa các yếu tố trong bản đồ:

{ 
"models": 
[ 
    { 
    "model": "a", 
    "type": "x" 
    }, 
    { 
    "model": "b", 
    "type": "y" 
    } 
] 
} 

Đó là đúng JSON cũng như đó là YAML, bởi vì YAML là một siêu của JSON. Bạn có thể, ví dụ: kiểm tra trực tuyến tại số YAML parser này.

Bạn có thể chuyển đổi nó thành kiểu khối bạn thích như YAML sử dụng this online converter, hoặc nếu bạn có ruamel.yaml (phiên bản nâng cao PyYAML) của mình, bạn có thể sử dụng tiện ích dòng lệnh của nó để chuyển đổi JSON thành chặn YAML (phiên bản 0.9.1 bạn cũng có thể buộc dòng chảy phong cách):

yaml json in.json 

mà được bạn:

models: 
- model: a 
    type: x 
- model: b 
    type: y 
+1

Điều này thực sự * là * câu trả lời tốt hơn. Tôi hơi xấu hổ khi được tôi chấp nhận. –

+0

Cảm ơn, nhưng nhìn vào số lượng upvote, rõ ràng câu trả lời của bạn phục vụ một nhu cầu và tôi không. – Anthon

+0

Tôi đang bôi nó xuống "những gì mọi người muốn" và "những gì mọi người cần" phân đôi. Điểm bạn đang làm ở đây là những điểm quan trọng - người tạo YAML bằng công cụ như JQ và sau đó chuyển đổi thành kiểu khối nếu họ thích với các công cụ bạn liên kết sẽ có giải pháp mạnh mẽ hơn nhiều so với người cố gắng tạo văn bản để phù hợp với ví dụ. –

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