huz*_*yfe 1 jquery json jsonpath
我有20000个对象的巨大JSON文件。我想查询此json文件中的字符串。但是,使用jsonpath,我只能找到完全匹配的内容吗?
假设我的档案如下:
{ "store": {
"book": [
{ "category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{ "category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{ "category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{ "category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想做的是:
jsonPath(data, "$..book[?(@.title like 'ord')]")
Run Code Online (Sandbox Code Playgroud)
并获得标题中带有“ ord”的书籍。
{ "category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
{ "category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
}
Run Code Online (Sandbox Code Playgroud)
可能吗?
更新:
根据单元测试和此答案,您可以在表达式中嵌入一个正则表达式文字,它将被规避。以下是单元测试的示例。
$.menu.items[?(@ && @.label && /SVG/.test(@.label))].id
Run Code Online (Sandbox Code Playgroud)
因此,以您的示例为例:
$.store.book[ ?( @ && @.title && /ord/.test(@.title) ) ].isbn
Run Code Online (Sandbox Code Playgroud)
我已经将jsonPath用于一些相当大的json文件(2-3 MB),它们是导致我们的应用程序运行缓慢的原因。如果您完全关心性能,建议您为要搜索的每个字段创建一个补充索引。这样做还可以使您加权每个字段的相关性值,这对于获得良好的搜索结果非常重要。
或者,更好的是,如果您预计应用程序可能会增长,则可能需要招待服务器端搜索引擎(http://sphinxsearch.com/或SAAS版本http://indexden.com/)。
至于您的特定问题,应该支持like运算符。但是,我仅用一个字符串数组(例如,数据结构中的标题)并使用简单的javascript正则表达式(http://www.w3schools.com/jsref/jsref_obj_regexp.asp)就能够实现相当不错的性能。。
| 归档时间: |
|
| 查看次数: |
5781 次 |
| 最近记录: |