Có một ngôn ngữ truy vấn cho JSON?


227

Có một ngôn ngữ (đại khái) SQL hoặc XQuery để truy vấn JSON không?

Tôi đang nghĩ về các bộ dữ liệu rất nhỏ ánh xạ độc đáo tới JSON, nơi thật dễ dàng để trả lời các truy vấn như "tất cả các giá trị của X trong đó Y> 3" là gì hoặc thực hiện các hoạt động loại SUM / COUNT thông thường.

Như ví dụ hoàn toàn trang điểm, một cái gì đó như thế này:

[{"x": 2, "y": 0}}, {"x": 3, "y": 1}, {"x": 4, "y": 1}]

SUM(X) WHERE Y > 0     (would equate to 7)
LIST(X) WHERE Y > 0    (would equate to [3,4])

Tôi nghĩ rằng điều này sẽ hoạt động cả phía máy khách và phía máy chủ với kết quả được chuyển đổi sang cấu trúc dữ liệu cụ thể theo ngôn ngữ (hoặc có thể được giữ dưới dạng JSON)

Một Google nhanh chóng gợi ý rằng mọi người đã nghĩ về nó và thực hiện một số điều ( JAQL ), nhưng có vẻ như không phải là một cách sử dụng tiêu chuẩn hoặc bộ thư viện đã xuất hiện. Mặc dù mỗi chức năng khá đơn giản để tự thực hiện, nhưng nếu ai đó đã thực hiện đúng thì tôi không muốn phát minh lại bánh xe.

Bất kỳ đề xuất?

Chỉnh sửa: Đây thực sự có thể là một ý tưởng tồi hoặc JSON có thể là định dạng quá chung chung cho những gì tôi đang nghĩ .. Lý do muốn có một ngôn ngữ truy vấn thay vì chỉ thực hiện các hàm tổng hợp / etc khi cần là tôi hy vọng sẽ xây dựng các truy vấn động dựa trên đầu vào của người dùng. Kiểu như lập luận rằng "chúng ta không cần SQL, chúng ta chỉ có thể viết các hàm chúng ta cần". Cuối cùng, điều đó sẽ vượt quá tầm tay hoặc cuối cùng bạn sẽ viết phiên bản SQL của riêng mình khi bạn đẩy nó ngày càng xa hơn. (Được rồi, tôi biết đó là một chút tranh luận ngớ ngẩn, nhưng bạn hiểu ý ..)


Tôi có một nhu cầu như vậy quá. Tôi cần khớp các yêu cầu JSON đến với các giá trị cụ thể tại các vị trí cụ thể trong cây đối tượng. Truy vấn thực sự phải được cấu hình bởi người dùng (sức mạnh). Giải pháp hiện tại là xây dựng XML thay đổi từ JSON và áp dụng XPath.
Vladimir Dyuzhev

1
Đó là nhiều hơn một công cụ shell, nhưng jq ( stedolan.github.io/jq ) đã rất tuyệt vời để khám phá dữ liệu json. Dùng thử trong sân chơi: jqplay.org
jtmoulia 10/2/2015

Có một công cụ dựa trên web cho phép bạn chạy các truy vấn SQL trên các nguồn cấp dữ liệu JSON hoặc API công khai tại sqall.co .
Stack Man


Câu trả lời:


91

Chắc chắn, làm thế nào về:

Tất cả họ dường như là một chút công việc trong tiến trình, nhưng làm việc ở một mức độ nào đó. Chúng cũng tương tự như XPath và XQuery về mặt khái niệm; mặc dù XML và JSON có các mô hình khái niệm khác nhau (phân cấp so với đối tượng / struct).

EDIT tháng 9-2015: Trên thực tế hiện đã có tiêu chuẩn Con trỏ JSON cho phép truyền tải nội dung JSON rất đơn giản và hiệu quả. Nó không chỉ được chỉ định chính thức mà còn được hỗ trợ bởi nhiều thư viện JSON. Vì vậy, tôi sẽ gọi nó là tiêu chuẩn thực sự hữu ích, mặc dù do tính biểu cảm hạn chế của nó, nó có thể hoặc không thể được coi là Ngôn ngữ truy vấn mỗi se.


77
nói cách khác, không có gì tiêu chuẩn và ổn định ... :-(
Vladimir Dyuzhev

Nói về tiêu chuẩn, tôi nghe một tin đồn rằng XQuery 3.1 có thể được mở rộng để hỗ trợ các truy vấn JSON (tương tự JSONiq ). Tất nhiên, có thể mất một thời gian vì XQuery 3.0 chưa được phát hành chính thức.
Julien Ribon

Ôi xót xa, tôi nhất định hy vọng là không. Tất cả các nỗ lực XML-> JSON mà tôi đã thấy là những mớ hỗn độn khủng khiếp - mô hình thông tin không tương thích. Nhưng tôi muốn thấy JQuery sử dụng cùng các ý tưởng, các phần của cú pháp; chỉ cần sửa đổi đúng thành mô hình thông tin JSON.
StaxMan

1
Đối với bất kỳ ai đang tìm kiếm triển khai RubyPath của Ruby: github.com/joshbuddy/jsonpath
Robert Ross

@ GôTô: Sử dụng MongoDB, nếu bạn có sự tự do đó, có vẻ như là một cách tiếp cận khả thi. (xem câu trả lời dưới đây để biết ví dụ về cách dịch truy vấn sang trình bao tích hợp)
serv-inc

48

Tôi muốn giới thiệu dự án của tôi, tôi đang làm việc được gọi là jLinq . Tôi đang tìm kiếm thông tin phản hồi vì vậy tôi rất muốn nghe những gì bạn nghĩ.

Nếu cho phép bạn viết các truy vấn tương tự như cách bạn làm trong LINQ ...

var results = jLinq.from(records.users)

    //you can join records
    .join(records.locations, "location", "locationId", "id")

    //write queries on the data
    .startsWith("firstname", "j")
    .or("k") //automatically remembers field and command names

    //even query joined items
    .equals("location.state", "TX")

    //and even do custom selections
    .select(function(rec) {
        return {
            fullname : rec.firstname + " " + rec.lastname,
            city : rec.location.city,
            ageInTenYears : (rec.age + 10)
        };
    });

Nó hoàn toàn có thể mở rộng quá!

Tài liệu vẫn đang được tiến hành, nhưng bạn vẫn có thể thử trực tuyến.


@hugoware: có tài liệu nào cho việc này không. Có bất kỳ truy vấn nào khác ngoài .starts () (chẳng hạn như có chứa không?)
Rikki

5
Cập nhật lần cuối 8 năm trước và không có phản hồi nào khi được hỏi liệu dự án đã chết 5 năm trước ... Tôi nghĩ rằng dự án đã chết.
cfc


14

jmespath hoạt động thực sự khá dễ dàng và tốt, http://jmespath.org/ Nó đang được Amazon sử dụng trong giao diện dòng lệnh AWS, do đó, nó đã khá ổn định.


5
Tuy nhiên, cùng một lúc trên cùng một trang: "Nếu bạn cần các tính năng nâng cao hơn có thể không khả dụng với --query, bạn có thể kiểm tra jq, bộ xử lý JSON của dòng lệnh." Vì vậy, có vẻ như AWS sử dụng jmespathcho --querytham số, nhưng khuyến nghị jqcho đường ống dòng lệnh. docs.aws.amazon.com/cli/latest/userguide/ từ
wvducky

10

jq là ngôn ngữ J SON q uery, chủ yếu dành cho dòng lệnh nhưng có liên kết với nhiều ngôn ngữ lập trình (Java, node.js, php, ...) và thậm chí có sẵn trong trình duyệt thông qua jq-web .

Dưới đây là một số minh họa dựa trên câu hỏi ban đầu, đã đưa JSON này làm ví dụ:

 [{"x": 2, "y": 0}}, {"x": 3, "y": 1}, {"x": 4, "y": 1}]

SUM (X) WHERE Y> 0 (sẽ tương đương với 7)

map(select(.y > 0)) | add

DANH SÁCH (X) WHERE Y> 0 (sẽ tương đương với [3,4])

map(.y > 0)

cú pháp jq mở rộng cú pháp JSON

Mỗi biểu thức JSON là một biểu thức jq hợp lệ và các biểu thức như [1, (1+1)] và {"a": (1 + 1)} `minh họa cách jq mở rộng cú pháp JSON.

Một ví dụ hữu ích hơn là biểu thức jq:

{a,b}

trong đó, đưa ra giá trị JSON {"a":1, "b":2, "c": 3}, ước tính {"a":1, "b":2}.


8

Việc xây dựng trong array.filter()phương pháp làm cho hầu hết những cái gọi là thư viện truy vấn javascript lỗi thời

Bạn có thể đặt bao nhiêu điều kiện bên trong ủy nhiệm như bạn có thể tưởng tượng: so sánh đơn giản, bắt đầu, v.v. Tôi chưa kiểm tra nhưng có lẽ bạn cũng có thể lồng các bộ lọc để truy vấn các bộ sưu tập bên trong.


5
array.filter()là một phần của JavaScript, không phải JSON.
Iain Samuel McLean Elder

2
JSON là một tập hợp con của JavaScript, nhưng có rất nhiều ngôn ngữ hỗ trợ cả JSON và mảng và có phương thức lọc mảng được triển khai, vì vậy đây là một điểm hợp lệ.
dakab

7

Nếu bạn đang sử dụng .NET thì Json.NET hỗ trợ các truy vấn LINQ trên đầu JSON. Đây bài có một số ví dụ. Nó hỗ trợ lọc, ánh xạ, nhóm, v.v.


7

ObjectPath là ngôn ngữ truy vấn đơn giản và ligthweigth cho các tài liệu JSON của cấu trúc phức tạp hoặc không rõ. Nó tương tự như XPath hoặc JSONPath, nhưng mạnh hơn nhiều nhờ các tính toán số học nhúng, cơ chế so sánh và các hàm tích hợp.

Thí dụ

Phiên bản Python đã trưởng thành và được sử dụng trong sản xuất. JS vẫn đang trong giai đoạn thử nghiệm.

Có lẽ trong tương lai gần, chúng tôi sẽ cung cấp một phiên bản Javascript chính thức. Chúng tôi cũng muốn phát triển nó hơn nữa, để nó có thể phục vụ như một sự thay thế đơn giản hơn cho các truy vấn Mongo.


1
Ngoại trừ việc nó hầu như không có bất kỳ tài liệu nào, vì vậy thật khó để tìm ra cách làm bất cứ điều gì như tìm các yếu tố với văn bản như một cái gì đó.
James O'Brien

1
@ JamesO'Brien Cảm ơn nhận xét của bạn - nếu bạn thấy tài liệu tham khảo vô dụng và có bất kỳ vấn đề cụ thể nào trong đầu, hãy cho chúng tôi biết ở đây - ai đó sẽ cố gắng giúp đỡ. Chúng tôi hiện đang làm việc để làm cho các tài liệu có thể sử dụng nhiều hơn, tôi thích ý kiến ​​của bạn.
Ela Bednarek

Cảm ơn - tôi đánh giá cao nó. Tôi muốn sử dụng. Hiện tại tôi đang sử dụng ashphy.com/JSONPathOnlineEvaluator ?
James O'Brien

Không thể tìm ra cách sử dụng điều này với Javascript vì thiếu tài liệu hoàn toàn.
dùng3670743

Chúng tôi đang tìm kiếm những người đóng góp để giúp đỡ với điều đó. Bạn có thể viết trên Github hoặc google nhóm Groups.google.com/forum/#!members/objectpath những gì bạn đang cố gắng đạt được và tôi chắc chắn ai đó sẽ trả lời Qs của bạn.
Ela Bednarek

6

Một cách khác để xem xét điều này sẽ là sử dụng mongoDB Bạn có thể lưu trữ JSON của mình trong mongo và sau đó truy vấn nó thông qua cú pháp truy vấn mongodb.


MongoDB rất hay để sử dụng. Xem câu trả lời dưới đây cho một ví dụ về cách sử dụng.
phục vụ

4

OK, bài đăng này hơi cũ, nhưng ... nếu bạn muốn thực hiện truy vấn giống như SQL trong các đối tượng JSON (hoặc đối tượng JS) gốc trên các đối tượng JS, hãy xem https://github.com/deitch/searchjs

Nó vừa là ngôn ngữ jsql được viết hoàn toàn bằng JSON, vừa là một triển khai tham chiếu. Bạn có thể nói: "Tôi muốn tìm tất cả các đối tượng trong một mảng có tên ===" John "&& age === 25 như:

{name:"John",age:25,_join:"AND"}

Tìm kiếm triển khai tham chiếu hoạt động trong trình duyệt cũng như gói npm nút

npm install searchjs

Nó cũng có thể làm những việc như tham gia phức tạp và phủ định (KHÔNG). Nó tự nhiên bỏ qua trường hợp.

Nó không làm tổng kết hoặc đếm, nhưng có lẽ dễ dàng hơn để làm những người bên ngoài.


3

Đây là một số thư viện javascript đơn giản cũng sẽ thực hiện thủ thuật:

  • Dollar Q là một thư viện nhẹ đẹp. Nó có một cảm giác quen thuộc với cú pháp chuỗi được phổ biến bởi jQuery và chỉ có 373 SLOC.
  • SpahQL là ngôn ngữ truy vấn đầy đủ tính năng với cú pháp tương tự XPath ( Trang chủ , Github
  • jFunk là một ngôn ngữ truy vấn đang tiến hành, với cú pháp tương tự như các bộ chọn CSS / jQuery. Nó trông có vẻ đầy hứa hẹn, nhưng không có bất kỳ sự phát triển nào ngoài cam kết ban đầu.

  • (đã thêm 2014): công cụ dòng lệnh jq có cú pháp gọn gàng, nhưng thật không may, nó là thư viện ac. Ví dụ sử dụng:

    < package.json jq '.dependencies | to_entries | .[] | select(.value | startswith("git")) | .key'


3

Trong MongoDB , đây là cách nó hoạt động (trong trình vỏ mongo, có các trình điều khiển cho ngôn ngữ bạn chọn).

db.collection.insert({"x": 2, "y": 0}); // notice the ':' instead of ','
db.collection.insert({"x": 3, "y": 1});
db.collection.insert({"x": 4, "y": 1});

db.collection.aggregate([{$match: {"y": {$gt: 0}}}, 
                         {$group: {_id: "sum", sum: {$sum: "$x"}}}]);
db.collection.aggregate([{$match: {"y": {$gt: 0}}}, 
                         {$group: {_id: "list", list: {$push: "$x"}}}]);

Ba lệnh đầu tiên chèn dữ liệu vào bộ sưu tập của bạn. (Chỉ cần khởi động mongodmáy chủ và kết nối với mongomáy khách.)

Hai tiếp theo xử lý dữ liệu. $matchbộ lọc, $groupáp dụng sumlist, tương ứng.


2

SpahQL là triển vọng nhất và được nghĩ đến trong số này, theo như tôi có thể nói. Tôi rất khuyên bạn nên kiểm tra nó ra.


2


Tôi vừa hoàn thành một phiên bản đáng tin cậy của một ứng dụng khách JS-lib (defiant.js) thực hiện những gì bạn đang tìm kiếm. Với defiant.js, bạn có thể truy vấn cấu trúc JSON bằng các biểu thức XPath mà bạn quen thuộc (không có biểu thức cú pháp mới như trong JSONPath).

Ví dụ về cách thức hoạt động của nó (xem nó trong trình duyệt tại đây http://defiantjs.com/defiant.js/demo/sum.avg.htmlm ):

var data = [
       { "x": 2, "y": 0 },
       { "x": 3, "y": 1 },
       { "x": 4, "y": 1 },
       { "x": 2, "y": 1 }
    ],
    res = JSON.search( data, '//*[ y > 0 ]' );

console.log( res.sum('x') );
// 9
console.log( res.avg('x') );
// 3
console.log( res.min('x') );
// 2
console.log( res.max('x') );
// 4

Như bạn có thể thấy, DefiantJS mở rộng JSON đối tượng toàn cầu bằng hàm tìm kiếm và mảng trả về được phân phối với các hàm tổng hợp. DefiantJS chứa một vài chức năng khác nhưng những chức năng đó nằm ngoài phạm vi của chủ đề này. Dù sao đi nữa, bạn có thể kiểm tra lib với Trình đánh giá XPath của máy khách. Tôi nghĩ những người không quen thuộc với XPath sẽ thấy công cụ đánh giá này hữu ích.
http://defiantjs.com/#xpath_evaluator

Thông tin thêm về defiant.js
http://defiantjs.com/
https://github.com/hbi99/defiant.js

Tôi hy vọng bạn thấy nó hữu ích ... Trân trọng


Hiện tại có thể có được đường dẫn đầy đủ đến kết quả?
XeniaSis

2
  1. Google có một dự án gọi là lovefield ; chỉ cần tìm hiểu về nó, và nó có vẻ thú vị, mặc dù nó có liên quan nhiều hơn là chỉ thả vào gạch dưới hoặc lodash.

    https://github.com/google/lovefield

Lovefield là một công cụ truy vấn quan hệ được viết bằng JavaScript thuần túy. Nó cũng cung cấp trợ giúp với dữ liệu bền bỉ ở phía trình duyệt, ví dụ như sử dụng IndexedDB để lưu trữ dữ liệu cục bộ. Nó cung cấp cú pháp giống như SQL và hoạt động trên nhiều trình duyệt (hiện đang hỗ trợ Chrome 37+, Firefox 31+, IE 10+ và Safari 5.1 + ...


  1. Một mục thú vị gần đây trong không gian này được gọi là jinqJs .

    http://www.jinqjs.com/

    Xem xét ngắn gọn các ví dụ , có vẻ đầy hứa hẹn và tài liệu API dường như được viết tốt.


function isChild(row) {
  return (row.Age < 18 ? 'Yes' : 'No');
}

var people = [
  {Name: 'Jane', Age: 20, Location: 'Smithtown'},
  {Name: 'Ken', Age: 57, Location: 'Islip'},
  {Name: 'Tom', Age: 10, Location: 'Islip'}
];

var result = new jinqJs()
  .from(people)
  .orderBy('Age')
  .select([{field: 'Name'}, 
     {field: 'Age', text: 'Your Age'}, 
     {text: 'Is Child', value: isChild}]);

jinqJs là một thư viện javaScript nhỏ, đơn giản, gọn nhẹ và có thể mở rộng, không có phụ thuộc. jinqJs cung cấp một cách đơn giản để thực hiện SQL như các truy vấn trên mảng, bộ sưu tập và dịch vụ web javaScript trả về phản hồi JSON. jinqJs tương tự như biểu thức Lambda của Microsoft cho .Net và nó cung cấp các khả năng tương tự cho các bộ sưu tập truy vấn bằng cách sử dụng chức năng cú pháp và vị ngữ giống như SQL. Mục đích của jinqJs là cung cấp trải nghiệm giống như SQL cho các lập trình viên quen thuộc với các truy vấn LINQ.


1

Tôi sẽ thứ hai khái niệm chỉ sử dụng javascript của riêng bạn, nhưng đối với một cái gì đó tinh vi hơn một chút, bạn có thể xem dữ liệu dojo . Không sử dụng nó nhưng có vẻ như nó cung cấp cho bạn loại giao diện truy vấn mà bạn đang tìm kiếm.


1

Việc triển khai Jaql hiện tại nhắm mục tiêu xử lý dữ liệu lớn bằng cách sử dụng cụm Hadoop, vì vậy nó có thể nhiều hơn bạn cần. Tuy nhiên, nó chạy dễ dàng mà không cần cụm Hadoop (nhưng vẫn yêu cầu mã Hadoop và các phụ thuộc của nó để được biên dịch, phần lớn được bao gồm). Một triển khai nhỏ của Jaql có thể được nhúng trong Javascript và trình duyệt sẽ là một bổ sung tuyệt vời cho dự án.

Các ví dụ của bạn ở trên dễ dàng được viết bằng jaql:

$data = [{"x": 2, "y": 0}, {"x": 3, "y": 1}, {"x": 4, "y": 1}];

$data -> filter $.y > 0 -> transform $.x -> sum(); // 7

$data -> filter $.y > 0 -> transform $.x; // [3,4]

Tất nhiên, có nhiều hơn nữa. Ví dụ:

// Compute multiple aggregates and change nesting structure:
$data -> group by $y = $.y into { $y, s:sum($[*].x), n:count($), xs:$[*].x}; 
    // [{ "y": 0, "s": 2, "n": 1, "xs": [2]   },
    //  { "y": 1, "s": 7, "n": 2, "xs": [3,4] }]

// Join multiple data sets:
$more = [{ "y": 0, "z": 5 }, { "y": 1, "z": 6 }];
join $data, $more where $data.y == $more.y into {$data, $more};
    // [{ "data": { "x": 2, "y": 0 }, "more": { "y": 0, "z": 5 }},
    //  { "data": { "x": 3, "y": 1 }, "more": { "y": 1, "z": 6 }},
    //  { "data": { "x": 4, "y": 1 }, "more": { "y": 1, "z": 6 }}]

Jaql có thể được tải xuống / thảo luận tại http://code.google.com.vn/p/jaql/


1

Bạn cũng có thể sử dụng Underscore.js , về cơ bản là một thư viện dao kéo để thao tác các bộ sưu tập. Sử dụng _.filter, _.pluck, _.reducebạn có thể làm SQL giống như truy vấn.

var data = [{"x": 2, "y": 0}, {"x": 3, "y": 1}, {"x": 4, "y": 1}];

var posData = _.filter(data, function(elt) { return elt.y > 0; });
// [{"x": 3, "y": 1}, {"x": 4, "y": 1}]

var values = _.pluck(posData, "x");
// [3, 4]

var sum = _.reduce(values, function(a, b) { return a+b; });
// 7

Underscore.js hoạt động cả phía máy khách và phía máy chủ và là một thư viện đáng chú ý.

Bạn cũng có thể sử dụng Lo-Dash , một nhánh của Underscore.js với hiệu suất tốt hơn.


1

Bất cứ khi nào có thể tôi sẽ chuyển tất cả các truy vấn sang phụ trợ trên máy chủ (sang SQL DB hoặc loại cơ sở dữ liệu nguyên gốc khác). Lý do là nó sẽ nhanh hơn và tối ưu hóa hơn để thực hiện truy vấn.

Tôi biết rằng jSON có thể độc lập và có thể có +/- để có ngôn ngữ truy vấn nhưng tôi không thể thấy lợi thế nếu bạn đang truy xuất dữ liệu từ phụ trợ vào trình duyệt, vì hầu hết các trường hợp sử dụng JSON. Truy vấn và lọc tại phụ trợ để có được một dữ liệu nhỏ cần thiết.

Nếu vì bất kỳ lý do gì bạn cần truy vấn ở phần đầu (chủ yếu trong trình duyệt) thì tôi sẽ đề nghị chỉ sử dụng mảng.filter (tại sao lại phát minh ra thứ khác?).

Điều đó nói rằng điều tôi nghĩ sẽ hữu ích hơn là API chuyển đổi cho json ... chúng hữu ích hơn vì một khi bạn có dữ liệu bạn có thể muốn hiển thị nó theo một số cách. Tuy nhiên, một lần nữa, bạn có thể thực hiện nhiều thao tác này trên máy chủ (có thể dễ dàng mở rộng hơn nhiều so với trên máy khách - NẾU bạn đang sử dụng mô hình máy khách <-> máy khách.

Chỉ cần 2 xu của tôi!


1

Hãy xem https://github.com/niclasko/Cypher.js (lưu ý: Tôi là tác giả)

Đó là một triển khai Javascript phụ thuộc 0 của ngôn ngữ truy vấn cơ sở dữ liệu đồ thị Cypher cùng với cơ sở dữ liệu đồ thị. Nó chạy trong trình duyệt (được thử nghiệm với Firefox, Chrome, IE).

Liên quan đến câu hỏi. Nó có thể được sử dụng để truy vấn các điểm cuối JSON:

load json from "http://url/endpoint" as l return l limit 10

Đây là một ví dụ về truy vấn một tài liệu JSON phức tạp và thực hiện phân tích về nó:

Ví dụ truy vấn JSON của Cypher.js


1

PythonQL cung cấp một cú pháp nhúng rằng IMHO là một sự cải tiến về SQL, chủ yếu bởi vì group, window, where, let, vv có thể được trộn lẫn một cách tự do.

$ cat x.py
#coding: pythonql
data = [{"x": 2, "y": 0}, {"x": 3, "y": 1}, {"x": 4, "y": 1}]
q = [x match {'x': as x, 'y': as y} in data where y > 0]
print(sum(q))
print(list(q))

q = [x match {'x': as x, 'y': as y} as d in data where d['y'] > 0]
print(sum(q))

Mã này hiển thị hai câu trả lời khác nhau cho câu hỏi của bạn, tùy thuộc vào nhu cầu của bạn để xử lý toàn bộ cấu trúc hoặc chỉ giá trị. Thực hiện cho bạn kết quả mong đợi.

$ python x.py
7
[3, 4]
7

0

Bạn có thể sử dụng linq.js.

Điều này cho phép sử dụng các tập hợp và lựa chọn từ một tập hợp dữ liệu của các đối tượng, như các dữ liệu cấu trúc khác.

var data = [{ x: 2, y: 0 }, { x: 3, y: 1 }, { x: 4, y: 1 }];

// SUM(X) WHERE Y > 0     -> 7
console.log(Enumerable.From(data).Where("$.y > 0").Sum("$.x"));

// LIST(X) WHERE Y > 0    -> [3, 4]
console.log(Enumerable.From(data).Where("$.y > 0").Select("$.x").ToArray());
<script src="https://cdnjs.cloudflare.com/ajax/libs/linq.js/2.2.0.2/linq.js"></script>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.