【问题标题】:How to query javascript object [closed]如何查询javascript对象[关闭]
【发布时间】:2019-12-23 10:11:34
【问题描述】:

我从另一台服务器收到一个大 JSON,我想对其进行一些查询操作。 例如:

{
  "name":"John",
  "age":30,
  "cars": {
    "car1":"Ford",
    "car2":"BMW",
    "car3":"Fiat"
  },
  "friends": ["abby","benji","ciri"]
 }

我可以手动进行查询,也可以使用 lodash,但是是否有一个库可以执行查询,例如:FIND.. WHERE.., SELECT, TOP 5...

我应该考虑为此在内存数据库中不使用 sql 吗?

【问题讨论】:

  • NoSQL 最适合这种情况。
  • 即使我一次只处理一个 json 文档?我真的不需要保存那个json,只需查询它并返回过滤结果
  • 如果您要求图书馆,那么这是题外话。如果您在实施解决方案时遇到问题,请专注于一个方面,并描述您到目前为止所做的工作以及您遇到问题的地方。否则这个问题太宽泛了。请注意,本网站上有几个问答,针对特定方面,如查找、过滤、相交、联合、...等

标签: javascript sql json performance in-memory


【解决方案1】:

您可以尝试alasql.js,您可以在其中对 JSON 对象进行查询。

var data = [{
  "name":"John",
  "age":30,
  "cars": {
    "car1":"Ford",
    "car2":"BMW",
    "car3":"Fiat"
  },
  "friends": ["abby","benji","ciri"]
 },
 {
  "name":"Smith",
  "age":17,
  "cars": {
    "car1":"Ford",
  },
  "friends": ["a","b","c"]
 }]

// Do the query
console.log(alasql("SELECT * FROM ? WHERE age >= 18",[data]));
<script src="https://cdnjs.cloudflare.com/ajax/libs/alasql/0.5.1/alasql.min.js"></script>

【讨论】:

  • 请求场外资源(如图书馆)对于 SO 来说是题外话。为什么还要添加答案?
  • 600+kb 库对于这种简单的任务可能是一个矫枉过正,恕我直言。无论如何,对我来说很好的发现:)
【解决方案2】:

用于“查询”集合和数组lodashramda 被占用。

但是,为了进行“真正的查询”,您需要一个数据库(文档(例如 Mongo)、关系(例如 PostGre)或图表(例如 Neo4J),根据您的需要)。

【讨论】:

  • 请求场外资源(如图书馆)对于 SO 来说是题外话。为什么还要添加答案?
  • 这是关于解决问题的方法,而不是特定的库。执行类似 SQL 的查询并不常见,仍然是依赖数组/集合库或只是香草 javascript 的更好选择。