Filter 基于特定键过滤geojson中的对象
我尝试编辑geojson文件,以仅保留具有键“name”的对象。 过滤器可以工作,但我找不到一种方法来保存其他对象,特别是几何体,并将整个内容重定向到一个新的geojson文件。是否有一种方法可以在过滤一个子对象后显示整个对象 下面是我的数据示例。第一个对象具有“name”属性,而第二个对象没有:Filter 基于特定键过滤geojson中的对象,filter,geojson,jq,Filter,Geojson,Jq,我尝试编辑geojson文件,以仅保留具有键“name”的对象。 过滤器可以工作,但我找不到一种方法来保存其他对象,特别是几何体,并将整个内容重定向到一个新的geojson文件。是否有一种方法可以在过滤一个子对象后显示整个对象 下面是我的数据示例。第一个对象具有“name”属性,而第二个对象没有: { "features": [ { "type": "Feature", "id": "way/24824633", "properties": {
{
"features": [
{
"type": "Feature",
"id": "way/24824633",
"properties": {
"@id": "way/24824633",
"highway": "tertiary",
"lit": "yes",
"maxspeed": "50",
"name": "Rue de Kleinbettingen",
"surface": "asphalt"
},
"geometry": {
"type": "LineString",
"coordinates": [
[
5.8997935,
49.6467825
],
[
5.8972561,
49.6467445
]
]
}
},
{
"type": "Feature",
"id": "way/474396855",
"properties": {
"@id": "way/474396855",
"highway": "path"
},
"geometry": {
"type": "LineString",
"coordinates": [
[
5.8020608,
49.6907648
],
[
5.8020695,
49.6906054
]
]
}
}
]
}
以下是我使用jq
cat file.geojson | jq '.features[].properties | select(has("name"))'
“几何体”也是“特征”的子对象,但我找不到直接从“特征”级别进行选择的方法。有什么办法吗?还是找到更好的解决办法
因此,所需输出为:
{
"type": "Feature",
"id": "way/24824633",
"properties": {
"@id": "way/24824633",
"highway": "tertiary",
"lit": "yes",
"maxspeed": "50",
"name": "Rue de Kleinbettingen",
"surface": "asphalt"
},
"geometry": {
"type": "LineString",
"coordinates": [
[
5.8997935,
49.6467825
],
[
5.8972561,
49.6467445
]
]}}
您可以将筛选后的列表返回到。功能
:
jq '.features |= map(select(.properties|has("name")))'
确切要求的输出是什么/?每个具有“名称”键(包括其几何体属性)的对象。像这个(对不起,操作不好,所以下面的注释中有示例):{“类型”:“特征”,“id”:“方式/24824633”,“属性”:{“@id”:“方式/24824633”,“公路”:“第三”,“照明”:“是”,“最大速度”:“50”,“名称”:“克莱因贝廷街”,“表面”:“沥青”},“几何”:{“类型”:“线条”,“坐标”:[[5.8997935,49.6467825],[5.8972561,49.6467445],你的
JSON
也有语法问题,一些未终止的}
我想,请检入你的代码并修复看到的错误,然后你可以在上使用jq
it@Inian我纠正了报告中的错误“必需的输出”部分。感谢您的注意。我在这里学到了一些重要的东西:不仅要检查jsonlint.com中的全部代码,还要检查发布的摘录。我不会再犯这个错误了。很高兴听到这个消息!