首页 > 解决方案 > 如何通过python替换非标准json文件中的值

问题描述

我有 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。所以它必须是这样的:

"ip" : "127.0.0.1",

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

我怎样才能通过 python json 做到这一点?

标签: pythonjson

解决方案


您的 JSON 文件包含不被视为有效 JSON 的注释,如果尝试使用json.load或将无法加载json.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)

推荐阅读