【问题标题】:Replacing JSON pattern替换 JSON 模式
【发布时间】:2017-11-18 03:26:43
【问题描述】:

我的 JSON 文件是这样的:

{"A":[
{"Timestamp": "2017-11-14 14:39:54", "File": "E.kmp", "C":{....},
{"Timestamp": "2017-11-14 14:40:32", "File": "E.kmp", "L":{....},
{"Timestamp": "2017-11-14 14:41:32", "File": "E.kmp", "L":{....},
................................................................,
{"Timestamp": "2017-11-14 14:42:32", "File": "D.kmp", "L":{....},
{"Timestamp": "2017-11-14 14:43:32", "File": "D.kmp", "L":{....}
]

我想将所有“文件”名称更改为“E.kmp”。这就是为什么我需要用“E.kmp”替换“D.kmp”。如果可以使用 python 或 R,请帮助我。 Python 更可取。

【问题讨论】:

    标签: python r replace pattern-matching


    【解决方案1】:

    这是R中的一种方式

    library(jsonlite)
    library(tidyverse)
    res <- fromJSON(json_val) %>%
                 map(mutate, File = 'E.kmp') %>%
                 toJSON
    
    prettify(res, indent=1)
    # {
    # "A": [
    #  {
    #   "Timestamp": "2017-11-14 14:39:54",
    #   "File": "E.kmp"
    #  },
    #  {
    #   "Timestamp": "2017-11-14 14:49:54",
    #   "File": "E.kmp"
    #  },
    #  {
    #   "Timestamp": "2017-11-14 14:59:54",
    #   "File": "E.kmp"
    #  }
    # ]
    #}
    

    数据

    json_val <- '{"A":[{"Timestamp": "2017-11-14 14:39:54", "File": "E.kmp"},
                 {"Timestamp": "2017-11-14 14:49:54", "File": "D.kmp"},
                 {"Timestamp": "2017-11-14 14:59:54", "File": "D.kmp"}
                ]}'
    

    【讨论】:

      【解决方案2】:

      一个简单的解决方案是使用 for 循环遍历字典并替换值。

      json_val = {"A":[{"Timestamp": "2017-11-14 14:39:54", "File": "E.kmp"},
                       {"Timestamp": "2017-11-14 14:49:54", "File": "D.kmp"},
                       {"Timestamp": "2017-11-14 14:59:54", "File": "D.kmp"}
                      ]}
      for dic in json_val['A']:
          if dic['File'] != 'E.kmp':
              dic['File'] = 'E.kmp'
      print json_val
      

      上面的sn-p如果值不是E.kmp,则替换列表内所有字典中键File的值。

      你不需要json.loads(json_val),因为python可以处理json。

      输出如下:

      {'A': [{'Timestamp': '2017-11-14 14:39:54', 'File': 'E.kmp'}, 
             {'Timestamp': '2017-11-14 14:49:54', 'File': 'E.kmp'}, 
             {'Timestamp': '2017-11-14 14:49:54', 'File': 'E.kmp'}
            ]}
      

      【讨论】:

        【解决方案3】:

        只需将D.kmp 替换为E.kmp

        import json    
        text = '''
        {"A":[
        {"Timestamp": "2017-11-14 14:39:54", "File": "E.kmp", "C":{....},
        {"Timestamp": "2017-11-14 14:40:32", "File": "E.kmp", "L":{....},
        {"Timestamp": "2017-11-14 14:41:32", "File": "E.kmp", "L":{....},
        ................................................................,
        {"Timestamp": "2017-11-14 14:42:32", "File": "D.kmp", "L":{....},
        {"Timestamp": "2017-11-14 14:43:32", "File": "D.kmp", "L":{....}
        ]
        '''
        
        json_data = json.loads(text)
        for element in json_data["A"]:
              if element["File"] == "D.kmp":
                  element["File"] = "E.kmp"
        

        【讨论】:

          【解决方案4】:

          由于我看不到你的整个 JSON 结构,这里是如何用 replace() 来做的

          with open('file.json', 'r') as file :
              data = file.read()
          
          data = data.replace('"File": "D.kmp"', '"File": "E.kmp"')
          
          with open('file.json', 'w') as file:
              file.write(data)
          

          【讨论】:

            【解决方案5】:

            我想有简单的方法:

            your_json['A'] =[i for i in your_json['A'] if not i.update({"File":"D.kmp"})]
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-12-25
              • 1970-01-01
              • 2018-09-24
              • 2014-10-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多