使用Python向JSON文件添加新的键值对

时间:2015-03-28 00:59:10

标签: python json

我有一组包含一些信息的JSON文件。下面的数据是关键'BrowserInfo'的值。我想提取以下信息 来自下面给出的TitleLinksBrowserPlatformCPUs,将上述字段添加为JSON文件中的键并提取其值和分配给那些键。

标题:世界上最好的网站| mywebsite.com
链接:225
浏览器:Mozilla / 5.0(X11; Linux x86_64)AppleWebKit / 537.36 Ubuntu Chromium / 41.0.2272.76 Chrome / 41.0.2272.76 Safari / 537.36
平台:Linux x86_64
CPU:8

我已经编写了一个python程序来下降到该目录并从JSON文件中提取“BrowserInfo”值。

# Set the directory you want to start from
rootDir = '/home/space'
for dirName, subdirList, fileList in os.walk(rootDir):
    print('Found directory: %s' % dirName)
    for fname in fileList:
        fname='space/'+fname
        with open(fname, 'r+') as f:
            json_data = json.load(f)
            BrowserInfo = json_data['BrowserInfo']
            print(BrowserInfo)

如何使用Python提取值并将新的键值对添加到JSON文件中。

2 个答案:

答案 0 :(得分:1)

假设,(这似乎是一个很大的假设),BrowserInfo包含由': '分隔的换行符分隔的键值组,您可以提取键/值with:

for line in BrowserInfo.splitlines():
    k,v = line.split(': ', 1)

然后只需在字典中的任何位置插入它们,例如:

json_data['BrowserInfo'] = {}
for line in BrowserInfo.splitlines():
    k,v = line.split(': ', 1)
    json_data['BrowserInfo'][k] = v

答案 1 :(得分:0)

解析的快速演示

>>>import re, itertools

>>> BrowserInfo
'Title: Worlds best websit | mywebsite.com\nLinks: 225\nBrowser: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Ubuntu Chromium/41.0.2272.76 Chrome/41.0.2272.76 Safari/537.36\nPlatform: Linux x86_64\nCPUs: 8'

>>> re.split(':|\n', BrowserInfo)
['Title', ' Worlds best websit | mywebsite.com', 'Links', ' 225', 'Browser', ' Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Ubuntu Chromium/41.0.2272.76 Chrome/41.0.2272.76 Safari/537.36', 'Platform', ' Linux x86_64', 'CPUs', ' 8']

>>> s = re.split(':|\n', BrowserInfo)
>>> {pair[0].strip():pair[1].strip() for pair in itertools.izip(s[::2], s[1::2])}
{'Platform': 'Linux x86_64', 'Browser': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Ubuntu Chromium/41.0.2272.76 Chrome/41.0.2272.76 Safari/537.36', 'CPUs': '8', 'Links': '225', 'Title': 'Worlds best websit | mywebsite.com'}

因此

json_data['BrowserInfo'] = {pair[0].strip():pair[1].strip() for pair in itertools.izip(s[::2], s[1::2])}

将是你的json