如何从python中的JSON文件中删除注释行

时间:2017-04-09 03:50:48

标签: python json

我收到的格式如下:

// 20170407
// http://info.employeeportal.org

{
 "EmployeeDataList": [
{
 "EmployeeCode": "200005ABH9",
 "Skill": CT70,
 "Sales": 0.0,
 "LostSales": 1010.4
} 
 ]
} 

需要删除文件中存在的额外注释行。

我尝试使用以下代码:

import json
import commentjson

with open('EmployeeDataList.json') as json_data:
            employee_data = json.load(json_data)
            '''employee_data = json.dump(json.load(json_data))'''
            '''employee_data = commentjson.load(json_data)'''
            print(employee_data)`

仍然无法从文件中删除评论并带来 正确格式的JSON文件。

没有出错的地方?在这方面的任何方向都非常感谢。谢谢提前

6 个答案:

答案 0 :(得分:4)

您没有正确使用json。它与import commentjson with open('EmployeeDataList.json', 'r') as handle: employee_data = commentjson.load(handle) print(employee_data) 模块具有相同的接口:

import json

with open('EmployeeDataList.json', 'r') as handle:
    fixed_json = ''.join(line for line in handle if not line.startswith('//'))
    employee_data = json.loads(fixed_json)

print(employee_data)

虽然在这种情况下,您的评论很简单,您可能不需要安装额外的模块来删除它们:

json.loads

请注意,两个代码段之间的区别在于使用json.load而不是bind 0.0.0.0:443 ssl crt /etc/ssl/cert.pem no-sslv3 ciphers AES128+EECDH:AES128+EDH ,因为您正在解析字符串而不是文件对象。

答案 1 :(得分:1)

尝试JSON-minify

  

JSON-minify通过删除所有空格和JS样式的注释(单行//和多行/ * .. * /)将类似JSON的内容块缩小为有效的JSON。

答案 2 :(得分:1)

我通常将JSON读作普通文件,删除注释然后将其解析为JSON字符串。可以使用以下代码段在一行中完成:

with open(path,'r') as f: jsonDict = json.loads('\n'.join([row for row in f.readlines() if len(row.split('//')) == 1]))

恕我直言,它非常方便,因为它不需要CommentJSON或任何其他非标准库。

答案 3 :(得分:0)

如果每次都可以使用相同数量的行:

fh = open('EmployeeDataList.NOTjson',"r")
rawText = fh.read()
json_data = rawText[rawText.index("\n",3)+1:]

这样json_data现在是没有前3行的文本字符串。

答案 4 :(得分:0)

那不是有效的json格式,所以只需像打开文本文档一样打开它,然后删除从//\n的任何内容。

with open("EmployeeDataList.json", "r") as rf:
    with open("output.json", "w") as wf:
        for line in rf.readlines():
            if line[0:2] == "//"
                continue
            wf.write(line)

答案 5 :(得分:0)

您的文件可以解析using HOCON

pip install pyhocon

>>> from pyhocon import ConfigFactory
>>> conf = ConfigFactory.parse_file('data.txt')
>>> conf
ConfigTree([('EmployeeDataList',
             [ConfigTree([('EmployeeCode', '200005ABH9'),
                          ('Skill', 'CT70'),
                          ('Sales', 0.0),
                          ('LostSales', 1010.4)])])])