使用 JMESPath 过滤 geoJSON 数据不起作用
filtering geoJSON data using JMESPath not working
我正在尝试从如下所示的 geoJSON 数据结构中过滤一些数据:
"features": [
{
"type": "Feature",
"properties": {
"@id": "node/7071544593",
"addr:city": "Joensuu",
"addr:housenumber": "12",
"addr:postcode": "80100",
"addr:street": "Siltakatu",
"addr:unit": "C 33",
"alt_name": "Crasman Oy Joensuu",
"alt_name_1": "Crasman Oy",
"name": "Crasman Joensuu",
"short_name": "Crasman",
"website": "https://www.crasman.fi"
},
"geometry": {
"type": "Point",
"coordinates": [
29.7621398,
62.6015236
]
},
"id": "node/7071544593"
},
{
"type": "Feature",
"properties": {
"@id": "node/7117872562",
"amenity": "car_rental",
"operator": "avis"
},
"geometry": {
"type": "Point",
"coordinates": [
29.7630643,
62.6036656
]
},
"id": "node/7117872562"
}
]
我想做的是遍历这个特征数组,查看属性对象以检查它是否包含网站,如果是,那么我可以从几何对象打印它的坐标。
这是我试过的:
Features[*].properties[?contains(@,'website')=='true'].geometry.coordinates
它给了我空值
试试这个:
features[?contains(keys(properties),'website')].geometry.coordinates
例如:
$ jp "features[?contains(keys(properties),'website')].geometry.coordinates" <input.json
[
[
29.7621398,
62.6015236
]
]
关于您的示例为何不起作用:
- 标识符区分大小写,因此您需要
features
,而不是 Features
。
properties
是对象,不是数组,因此不能对其应用过滤器表达式。
- 即使可以,您也不想
properties
过滤。您正在尝试过滤整个 features
.
contains
测试数组是否包含项目(或者字符串是否包含子字符串),而不是对象是否具有键。您可以使用 keys()
获取数组中对象的键。
- 你不需要比较
contains()
和true
的结果,它已经是一个布尔值。
- 即使您尝试与
true
进行比较,您也需要使用反引号:`true`
,而不是引号 'true'
.
我正在尝试从如下所示的 geoJSON 数据结构中过滤一些数据:
"features": [
{
"type": "Feature",
"properties": {
"@id": "node/7071544593",
"addr:city": "Joensuu",
"addr:housenumber": "12",
"addr:postcode": "80100",
"addr:street": "Siltakatu",
"addr:unit": "C 33",
"alt_name": "Crasman Oy Joensuu",
"alt_name_1": "Crasman Oy",
"name": "Crasman Joensuu",
"short_name": "Crasman",
"website": "https://www.crasman.fi"
},
"geometry": {
"type": "Point",
"coordinates": [
29.7621398,
62.6015236
]
},
"id": "node/7071544593"
},
{
"type": "Feature",
"properties": {
"@id": "node/7117872562",
"amenity": "car_rental",
"operator": "avis"
},
"geometry": {
"type": "Point",
"coordinates": [
29.7630643,
62.6036656
]
},
"id": "node/7117872562"
}
]
我想做的是遍历这个特征数组,查看属性对象以检查它是否包含网站,如果是,那么我可以从几何对象打印它的坐标。 这是我试过的:
Features[*].properties[?contains(@,'website')=='true'].geometry.coordinates
它给了我空值
试试这个:
features[?contains(keys(properties),'website')].geometry.coordinates
例如:
$ jp "features[?contains(keys(properties),'website')].geometry.coordinates" <input.json
[
[
29.7621398,
62.6015236
]
]
关于您的示例为何不起作用:
- 标识符区分大小写,因此您需要
features
,而不是Features
。 properties
是对象,不是数组,因此不能对其应用过滤器表达式。- 即使可以,您也不想
properties
过滤。您正在尝试过滤整个features
. contains
测试数组是否包含项目(或者字符串是否包含子字符串),而不是对象是否具有键。您可以使用keys()
获取数组中对象的键。- 你不需要比较
contains()
和true
的结果,它已经是一个布尔值。 - 即使您尝试与
true
进行比较,您也需要使用反引号:`true`
,而不是引号'true'
.