Bỏ qua, đến nội dung

@digiforce-nc/plugin-workflow-json-query

Plugin đăng ký node query JSON trong workflow, mở rộng plugin-workflow. Sử dụng JMESPath hoặc JSONPath để lọc, tìm kiếm, và trích xuất dữ liệu từ object JSON phức tạp.

Plugin này làm gì?

Node JSON Query nhận một object hoặc mảng JSON, áp dụng biểu thức query (JMESPath/JSONPath) để lọc và trích xuất dữ liệu. Phù hợp khi cần tìm phần tử trong mảng, lọc theo điều kiện, hoặc reshape dữ liệu JSON.

So với Get JSON Field (lấy đúng 1 field theo path), JSON Query hỗ trợ:

  • Lọc mảng theo điều kiện: items[?status == 'active']
  • Projection (chỉ lấy field cần): items[*].name
  • Aggregate: max_by(items, &price)

Cấu hình

Tham sốKiểuMô tả
sourcestringBiến workflow chứa JSON data nguồn
enginestringEngine query: JMESPath hoặc JSONPath
expressionstringBiểu thức query (ví dụ: items[?price > 100].name)
defaultValueanyGiá trị mặc định khi query không có kết quả

Input / Output

HướngDữ liệuMô tả
InputsourceObject hoặc mảng JSON cần query
InputexpressionBiểu thức JMESPath/JSONPath
OutputresultDữ liệu khớp query (có thể là array, object, hoặc scalar)
OutputcountSố phần tử kết quả (nếu result là array)

Tính năng chính

#Tính năngChi tiết
1JMESPathQuery language mạnh mẽ cho JSON (filter, projection, multiselect)
2JSONPathCú pháp quen thuộc kiểu XPath cho JSON
3Filter điều kiệnLọc phần tử theo điều kiện phức tạp
4ProjectionChỉ lấy các field cần thiết từ kết quả
5Nested queryTruy vấn vào nhiều cấp lồng nhau

Trường hợp sử dụng

#Kịch bảnMô tả
1Lọc sản phẩmLấy tất cả items có status == "active" từ API response
2Tìm phần tửTìm user có email cụ thể trong mảng users
3Reshape dataChuyển mảng objects thành mảng chỉ chứa field name
4Aggregate đơn giảnTính max_by(items, &price) bằng JMESPath built-in
5Multi-selectLấy nhiều field cùng lúc: items[*].[name, price]

Ví dụ biểu thức

EngineExpressionMô tả
JMESPathitems[?status == 'active']Lọc items active
JMESPathitems[*].nameLấy tất cả tên
JMESPathmax_by(items, &price)Item có giá cao nhất
JSONPath$.items[?(@.price > 100)]Items giá trên 100
JSONPath$.items[*].nameLấy tất cả tên

Lưu ý quan trọng

  • JMESPath và JSONPath có cú pháp khác nhau - chọn đúng engine
  • JMESPath mạnh hơn (hỗ trợ function, multiselect, pipe), JSONPath đơn giản hơn
  • Query trên mảng lớn (hàng ngàn phần tử) có thể chậm - cân nhắc filter ở tầng DB
  • Kết quả filter trả về mảng rỗng (không phải null) khi không có phần tử khớp
  • Expression lỗi cú pháp sẽ throw error - test kỹ expression trước khi dùng

Dependencies

PackageVai trò
@digiforce-nc/plugin-workflowWorkflow engine (peer)
@digiforce-nc/serverServer framework (peer)

Mục lục chi tiết