如何通过python替换非标准json文件中的值

2024-09-30 20:26:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个json文件,里面有很多注释。我只想替换特定的值,并通过在json文件中保存结构和格式来保存结果

例如,在本部分:

  "blocks" : [
{
  "block_name" : "PNS1",
  "ip" : "192.168.1.142",
  "dynamic_ports" : { "first" : 10000, "last" : 15000 },
  "inherits" : "PNS",
  "in" : [],
  "out" : [
    /* Отправка данных в другой коллектор */
    { "name" : "collector_data_out", "dest_port" : "collector_data_in", "dest_block" : "PNS2", "fifo" : true },
    /* Отправка темперутры, давлений и тарировок в СВС */
    { "name" : "svs_ctrl_out", "dest_port" : "svs_ctrl_in", "dest_block" : "SELF,MFI1,MODEL", "fifo" : true },
    /* Отправка данных для определения главного транзитора */
    { "name" : "another_transitor_out", "dest_port" : "another_transitor_in", "dest_block" : "PNS2", "fifo" : true }
  ]
},

我只想替换块中的->;知识产权。所以它一定是这样的:

"ip" : "127.0.0.1",

这是原始json文件:https://pastebin.com/Neumxy4p

如何通过python json实现这一点


Tags: 文件nameinipjsontruedataport
3条回答

以下是您的问题的一个解决方案:

with open(jsonPath) as file:
    json= json.load(file)
    file.close()
for block in json["blocks"]:
    block["ip"] = "127.0.0.1"

您的JSON文件包含的注释被认为是无效的JSON,如果尝试使用json.loadjson.loads,则无法加载该注释。
我使用了正向前瞻正向前瞻来匹配您的IP地址,并将其替换为127.0.0.1

import re

with open('your_file_name.json') as fp:
    file_content = (fp.read())

file_content = re.sub(r'(?<="ip"[\s]:[\s]")[\d.]+(?=",)', "127.0.0.1", file_content)

据我所知,您需要用一些自定义值替换您的IP

如果你想一成不变,试试这个

blocks = [{**item, "ip": "127.0.0.1"} for item in blocks]

如果突变不是一个问题,只要

for block in blocks:
    block["ip"] = "127.0.0.1"

相关问题 更多 >