nor*_*teo 15 json jsonpath node.js
我使用的NodeJS与jsonpath.我有这个json结构:
{
things:{
books: [
{name: "book1"},
{name: "book2"},
{name: "book3"},
{name: "book4"},
],
movies: [
{name: "movie1"},
{name: "movie2"},
{name: "movie3"},
{name: "movie4"},
]
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道jsonpath表达式返回一个带有things对象键名的数组.那将是:
["books","movies"]
Run Code Online (Sandbox Code Playgroud)
现在,我这样做:
Object.keys(jsonpath.eval(jsonStructure,"$.things").pop());
Run Code Online (Sandbox Code Playgroud)
但我发现它并不优雅......当我只需要键名时,我不需要复制整个结构.
小智 6
jsonPath 有新的更新 jsonpath-plus jsonpath-plus 在原始规范的基础上进行了扩展,添加了一些额外的运算符,并明确了原始规范中没有说明的一些行为。
^ 用于获取匹配项的父项 ~ 用于获取匹配项的属性名称(作为数组)
所以要获得正确的输出,请使用此查询“things.*~”,您也可以在这里尝试https://jsonpath.com/
我不相信有比你自己更好的解决方案:
Object.keys(jsonpath.eval(jsonStructure,"$.things").pop());
Run Code Online (Sandbox Code Playgroud)
我认为这里的主要误解是您不必担心这个片段“获取整个结构的副本”,因为您没有复制整个结构。您已经将整个对象加载到内存中, jsonpath 不会创建新副本,它只是返回对已存在对象的引用,即:
jsonpath.eval(jsonStructure,"$.things").pop() === jsonStructure.things //true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6773 次 |
| 最近记录: |