如何用 JSON 表示过滤器?

问题描述 投票:0回答:1
我正在编写一个前端应用程序,它将提供一个 UI,使用户能够做出某些过滤器选择。我们正在创建一个数据可视化,它将由符合用户过滤条件的数据对象填充。例如,用户可能会说:

显示具有电子邮件

[email protected]

[email protected]
[email protected]
 的所有数据对象,但前提是这些对象还具有与其关联的标签 
A
B

我们可以用

SQL

 来表示这一点:

SELECT * from dataPoints WHERE userEmail in ("[email protected]", "[email protected]", "[email protected]") ...
我想知道如何最好地将其编码为 JSON,以便前端用户可以保存过滤器。我们希望将“代表用户选择的 JSON”存储在数据库中,从数据库中检索它,并将其应用于 JSON 数据(即过滤发生在浏览器中)。

我想我可以用 JSON 表示查询指令,就像它是如何完成的

here,但我想知道......这不是一个已解决的问题吗?是否有方法可以将用户过滤器选择编码为 JSON 并执行客户端过滤?

sql json filtering
1个回答
0
投票
您可以使用 JSON 发送数组并对其进行内部联接以进行过滤。 在示例中,我创建了一些数据,因为您没有提供任何数据。

DECLARE @YOURTABLE TABLE (id int not null identity(1,1), email varchar(50), username varchar(50)) insert into @YOURTABLE values ('[email protected]', 'Aaaaa'),('[email protected]', 'XXXxxxxxx'),('[email protected]', 'Yyyyyyy'),('[email protected]', 'Zzzzz') --jason can be saved in client or in DB for user.. etc... DECLARE @paramJSON nvarchar(max) = N'{"emails":["[email protected]","[email protected]","[email protected]"]}' --this would be inside a stored proc or script ;with _values as ( SELECT email = b.value FROM OPENJSON(@paramJSON, '$') WITH ( em NVARCHAR(MAX) '$.emails' AS JSON ) a CROSS APPLY OPENJSON(a.em,'$') b ) select v.email, t.id, t.username from @YOURTABLE t INNER JOIN _values v on v.email = t.email
输出:
|电子邮件|ID|用户名|
|---|---|---|
|

[电子邮件受保护] |2| XXXxxxxxx| |[电子邮件受保护] |3| yyyyyy| |[电子邮件受保护] |4|嘶嘶|

© www.soinside.com 2019 - 2024. All rights reserved.