Trong khi những gì bạn đã chắc chắn hoạt động, nó sẽ là đúng hơn để sử dụng
contains
. Tôi sẽ tránh việc sử dụng đó vì nó có thể dẫn đến sự nhầm lẫn.
index("blue")
là
0
và người ta sẽ không coi đó là giá trị trung thực và có thể mong đợi nó bị loại trừ khỏi kết quả.
Xem xét sử dụng bộ lọc này để thay thế:
select(.items | contains(["blue"]))
này có thêm lợi ích mà nó sẽ có tác dụng nếu bạn muốn mục có nhiều hơn một trận đấu bằng cách đơn giản bổ sung thêm vào mảng.
Như sẽ chỉ ra trong nhận xét, điều này không hoàn toàn chính xác. Các chuỗi được so sánh bằng cách sử dụng kết hợp chuỗi con (contains
được sử dụng đệ quy) tại đây.
Nhìn lại, contains
không hoạt động như tôi nghĩ. Sử dụng index
hoạt động, nhưng cá nhân tôi sẽ không sử dụng nó. Có điều gì đó về việc tìm hiểu xem một mục có trong bộ sưu tập hay không bằng cách tìm chỉ mục của nó có cảm giác sai với tôi. Sử dụng contains
có ý nghĩa hơn với tôi, nhưng theo thông tin này, nó sẽ không lý tưởng trong trường hợp này.
Dưới đây là một sự thay thế mà nên làm việc một cách chính xác:
select([.items[] == "blue"] | any)
Hoặc một cách mở rộng hơn nếu bạn muốn để có thể phù hợp với nhiều giá trị:
select(.items as $values | ["blue", "yellow"] | map([$values[] == .] | any) | all)
Nguồn
2014-09-04 01:54:30
@Tomalak, xin lỗi. "Dòng json" là những gì tôi nên viết. – K2xL
@Tomalak, bạn đang yêu cầu mã nào? Không có mã. – K2xL
Vâng, quên nó đi. Tôi đã lầm. Tôi sẽ xóa các bình luận. – Tomalak