首页 > 解决方案 > JS 对象查询语法

问题描述

我正在尝试找到一种使用类似于 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. 类型 = TP 值 > 30

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

  1. type = TP 值 > 30 AND type = UU 值 > 90

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

标签: javascriptjqueryjsonjson-query

解决方案


通过简要查看 json-query 页面,我认为您的第二个查询是错误的。没有 * 查询将只返回一条记录。然后,您的查询没有意义,您不能拥有具有两种不同类型的项目。我认为您的查询应如下所示:

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

我可能是错的,我从来没有使用过那个图书馆。

编辑评论

你不能用简单的查询来做到这一点,因为每个对象都由你的查询测试,如果它适合或不适合,就简单地返回 bool 值。您需要按第一个条件过滤数据,并使用第二个条件过滤结果。

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;
}

推荐阅读