JS对象查询语法

时间:2018-10-18 07:09:47

标签: javascript jquery json json-query

我正试图找到一种使用类似于SQL的查询语法来过滤js集合的方法。

我发现完成此任务的唯一库是json-query

在某些情况下它可以工作,但是有局限性。不可能在同一查询的不同对象级别上进行查询,也不能查询多个结果。

以下是一些示例(以下面的数据结构为参考)

 [{
           "type": "UU",
            "value": "100",
            "tipo": "G",
            "strumento": "P",
            "aspetto": "C",
            "unit": "ml"
        },
        {
            "type": "PS",
            "value": "120/88",
            "rilevamento": "Manuale",
            "lato": "SX",
            "part": "Supina",
            "unit": "mmHg"
        },
        {
            "type": "TP",
            "value": "33.6",
            "tipo": "T",
            "unit": "°C"
        },
        {
            "type": "VO",
            "value": "12",
            "tipo": "VOAL",
            "unit": "ml"
        },
        {
            "type": "RS",
            "value": "60",
            "unit": "atti/min"
        },
        {
            "type": "HH",
            "value": "180",
            "modalita": "R",
            "unit": "cm"
        },
        {
            "type": "AA",
            "value": "50",
            "unit": "cm"
        },
        {
            "type": "PO",
            "value": "70",
            "rilevamento": "Manuale",
            "tipo": "FA",
            "sede": "PC",
            "unit": "bpm"
        }
    ]
  1. 类型=值大于30的TP
  

[type = TP&value> 30](适用于json-query)

  1. 类型=值> 30的TP和类型=值> 90的UU
  

[type = TP&value> 30&type = UU的值> 90](不适用于json查询)

2 个答案:

答案 0 :(得分:1)

我认为您应该使用JsLinq

$helperForm->tpl_vars = array(
     'fields_value' => array(
         'nameofmycolorpicker' => '#3399ff',
     ),
);

答案 1 :(得分:1)

通过简短地查看json-query页面,我认为您的第二个查询是错误的。不带*的查询将仅返回一条记录。这样,您的查询就没有意义了,您无法拥有一项具有两种不同类型的项目。我认为您的查询应如下所示:

  

[* type = TP和值> 30 |类型= UU&值> 90]

我可能是错的,我从未使用过该库。

  

编辑评论

您无法通过简单查询来执行此操作,因为每个对象均已通过查询进行测试,如果适合则不返回布尔值。您需要按第一个条件过滤数据,并按第二个条件过滤结果过滤器。

var tempData = jsonQuery('[* type = TP & value > 30]', {data: data}).value;
var result =   jsonQuery('[* type = UU & value > 90]', {data: tempData }).value;
  

编辑-可能的解决方案

如果您需要事先创建查询,我会考虑使用数组存储单个查询,然后按顺序应用它们。我不知道您是在JS还是在服务器上创建查询,所以我用JS编写了代码以保持代码一致性。

var result;
var queryArray;

queryArray.push("[* type = TP & value > 30]");
queryArray.push("[* type = UU & value > 90]");

for (i = 0; i < queryArray.length; i++) {
    result = jsonQuery(queryArray[i], {data: result }).value;
}