如何更改 JSON 文件中的嵌套值?

如果“ID”匹配,我试图更改特定的嵌套值(“pH”),但它只更改第一个而不是我想要的那个。


我想做什么:


{

    "type": "FeatureCollection",

    "name": "test",

    "crs": {

        "type": "name",

        "properties": {

            "name": "urn:ogc:def:crs:EPSG::3059"

        }

    },

    "features": [{

            "type": "Feature",

            "properties": {

                "ID": 1,

                "pH": 3.5,

                "P": 2.8,

                "K": 11.0,

                "Mg": 15.8

            },

            "geometry": {

                "type": "Polygon",

                "coordinates": [

                    [


                    ]

                ]

            }

        }, {

            "type": "Feature",

            "properties": {

                "ID": 2,

                "pH": 3,

                "P": 2.5,

                "K": 11.1,

                "Mg": 15.8

            },

            "geometry": {

                "type": "Polygon",

                "coordinates": [

                    [


                    ]

                ]

            }

        }

    ]

}

但它改变了“ID”为 1 的“pH 值”和“ID”:2 的“pH”值保持不变。


这是我的代码:


import json


with open('filepath', 'r+') as f:

    data = json.load(f)


    for feature in data['features']:


        print(feature['properties'])

        if feature['properties']["ID"] == 2:


            data['features'][0]['properties']["pH"]=10

            f.seek(0)

            json.dump(data, f, indent=4)

            f.truncate()


芜湖不芜
浏览 162回答 2
2回答

胡说叔叔

您需要在遍历时进行枚举data['features'],以便可以分配回正确的值data['features'][0]仅分配给ph列表索引 0。with open('filepath', 'r+') as f:    data = json.load(f)    for i, feature in enumerate(data['features']):  # enumerate while iterating        print(feature['properties'])        if feature['properties']["ID"] == 2:            data['features'][i]['properties']["pH"]=10  # assign back to the correct index location            f.seek(0)            json.dump(data, f)            f.truncate()

慕工程0101907

data['features'][0]由 [0] 索引,因此修改data["features"]. 您希望它根据评估为True您的条件的索引进行修改feature['properties']["ID"] == 2。尝试for index, feature in enumerate(data['features']):    ...    if feature['properties']["ID"] == 2:        data['features'][index]['properties']["pH"] = 10    ...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python