[英]Replace multiple keys and values of JSON file in Python
For geojson type file named data
as follows: 对于geojson类型的名为
data
文件,如下所示:
{
"type": "FeatureCollection",
"name": "entities",
"features": [{
"type": "Feature",
"properties": {
"Layer": "0",
"SubClasses": "AcDbEntity:AcDbPolyline",
"EntityHandle": "1A0"
},
"geometry": {
"type": "LineString",
"coordinates": [
[3220.136443006845184, 3001.530372177397112],
[3847.34171007254281, 3000.86074447018018],
[3847.34171007254281, 2785.240077064262096],
[3260.34191304818205, 2785.240077064262096],
[3260.34191304818205, 2795.954148466309107]
]
}
},
{
"type": "Feature",
"properties": {
"Layer": "0",
"SubClasses": "AcDbEntity:AcDbPolyline",
"EntityHandle": "1A4"
},
"geometry": {
"type": "LineString",
"coordinates": [
[3611.469650131302842, 2846.845982610575902],
[3695.231030111376185, 2846.845982610575902],
[3695.231030111376185, 2785.240077064262096],
[3611.469650131302842, 2785.240077064262096],
[3611.469650131302842, 2846.845982610575902]
]
}
}
]
}
I hope to realize the following manipulation to data
: 我希望实现以下对
data
操作:
EntityHandle
with Name
; Name
替换键EntityHandle
; EntityHandle
's value from hex number with 'sf_001', 'sf_002', 'sf_003'
, etc; EntityHandle
的值替换为'sf_001', 'sf_002', 'sf_003'
等; type
's value LineString
with Polygon
; Polygon
替换type
的值LineString
; coordinates
's two square brackets with three square brackets. coordinates
的两个方括号。 This is expected output: 这是预期的输出:
{
"type": "FeatureCollection",
"name": "entities",
"features": [{
"type": "Feature",
"properties": {
"Layer": "0",
"SubClasses": "AcDbEntity:AcDbPolyline",
"Name": "sf_001"
},
"geometry": {
"type": "Polygon",
"coordinates": [ [
[3220.136443006845184, 3001.530372177397112],
[3847.34171007254281, 3000.86074447018018],
[3847.34171007254281, 2785.240077064262096],
[3260.34191304818205, 2785.240077064262096],
[3260.34191304818205, 2795.954148466309107]
] ]
}
},
{
"type": "Feature",
"properties": {
"Layer": "0",
"SubClasses": "AcDbEntity:AcDbPolyline",
"Name": "sf_002"
},
"geometry": {
"type": "Polygon",
"coordinates": [ [
[3611.469650131302842, 2846.845982610575902],
[3695.231030111376185, 2846.845982610575902],
[3695.231030111376185, 2785.240077064262096],
[3611.469650131302842, 2785.240077064262096],
[3611.469650131302842, 2846.845982610575902]
] ]
}
}
]
}
I'm new in JSON
file manipulation using Python. 我是使用Python进行
JSON
文件操作的新手。 Please help me, thanks at advance. 请帮助我,谢谢。
import json
from pprint import pprint
with open('data.geojson') as f:
data = json.load(f)
pprint(data)
for feature in data['features']:
#print(feature)
print(feature['properties']['EntityHandle'])
for feature in data['features']:
feature['properties']['EntityHandle'] = feature['properties']['Name'] #Rename `EntityHandle` to `Name`
del feature['properties']['EntityHandle']
Result: 结果:
Traceback (most recent call last):
File "<ipython-input-79-8b30b71fedf9>", line 2, in <module>
feature['properties']['EntityHandle'] = feature['properties']['Name']
KeyError: 'Name'
Give this a shot: 试一下:
You can rename a key by using: 您可以使用以下方法重命名密钥:
dict['NewKey'] = dict.pop('OldKey')
And to replace a value, it's just as simple as setting the new vale equal to the specific key: 并替换一个值,就像将新值设置为等于特定键一样简单:
dict['Key'] = new_value
Full Code: 完整代码:
data = {
"type": "FeatureCollection",
"name": "entities",
"features": [{
"type": "Feature",
"properties": {
"Layer": "0",
"SubClasses": "AcDbEntity:AcDbPolyline",
"EntityHandle": "1A0"
},
"geometry": {
"type": "LineString",
"coordinates": [
[3220.136443006845184, 3001.530372177397112],
[3847.34171007254281, 3000.86074447018018],
[3847.34171007254281, 2785.240077064262096],
[3260.34191304818205, 2785.240077064262096],
[3260.34191304818205, 2795.954148466309107]
]
}
},
{
"type": "Feature",
"properties": {
"Layer": "0",
"SubClasses": "AcDbEntity:AcDbPolyline",
"EntityHandle": "1A4"
},
"geometry": {
"type": "LineString",
"coordinates": [
[3611.469650131302842, 2846.845982610575902],
[3695.231030111376185, 2846.845982610575902],
[3695.231030111376185, 2785.240077064262096],
[3611.469650131302842, 2785.240077064262096],
[3611.469650131302842, 2846.845982610575902]
]
}
}
]
}
sf_count = 0
for feature in data['features']:
feature['properties']['Name'] = feature['properties'].pop('EntityHandle') #Rename `EntityHandle` to `Name`
sf_count += 1
feature['properties']['Name'] = 'sf_%.3d' %sf_count # Replace hex with incrimental sf_xxx
feature['geometry']['type'] = 'Polygon' # Replace `LineString` to `Polygon`
feature['geometry']['coordinates'] = [[ each for each in feature['geometry']['coordinates'] ]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.