4 个版本
0.2.0 | 2022年4月6日 |
---|---|
0.1.2 | 2022年4月1日 |
0.1.1 | 2022年4月1日 |
0.1.0 | 2022年4月1日 |
#30 in #json-path
26KB
636 代码行
宽容的 JSON 指针
本软件包提供了一种类似于“JSON 指针”的接口。但实际上它执行的操作相当不同。
API
该软件包提供了一个名为 select_values
的函数。它接收一个对象和一组选择器作为参数。然后它返回一个只包含您选择字段的新对象。
选择器
选择器的语法比其他 API 更简单。只有一个特殊符号,就是 .
。
如果您编写 dog
并提供以下对象;
{
"dog": "bob",
"cat": "michel"
}
您将得到以下结果;
{
"dog": "bob",
}
很简单,对吧?
现在点号可以用作字段名,也可以用作嵌套对象。
例如,如果您有以下 JSON;
{
"dog.name": "jean",
"dog": {
"name": "bob",
"age": 6
}
}
多么糟糕的 JSON!但永远不要低估您的用户,他们 一定会 以某种方式将整个工作流程建立在这种 JSON 之上。在这里,使用 dog.name
选择器将选择所有字段,并返回以下 JSON;
{
"dog.name": "jean",
"dog": {
"name": "bob",
}
}
正如您所猜测的,这个软件包尽可能地宽容。它会匹配它能匹配的任何东西!考虑以下更糟糕的 JSON;
{
"pet.dog.name": "jean",
"pet.dog": {
"name": "bob"
},
"pet": {
"dog.name": "michel"
},
"pet": {
"dog": {
"name": "milan"
}
}
}
如果您编写 pet.dog.name
将选择所有内容。
匹配数组
使用这种选择器,您不能匹配数组中的特定元素。您的选择器将应用于数组中的所有元素。
考虑以下 JSON;
{
"pets": [
{
"animal": "dog",
"race": "bernese mountain",
},
{
"animal": "dog",
"race": "golden retriever",
},
{
"animal": "cat",
"age": 8,
}
]
}
使用过滤器 pets.animal
您将得到;
{
"pets": [
{
"animal": "dog",
},
{
"animal": "dog",
},
{
"animal": "cat",
}
]
}
数组中的空元素会被移除。因此,如果您要查找 pets.age
,您将只会得到;
{
"pets": [
{
"age": 8,
}
]
}
我想这就是您需要知道的一切 🎉
依赖项
~0.5–1MB
~20K SLoC