Python-为有效的JSON删除字符串中最后一个对象的逗号

时间:2019-06-14 06:35:05

标签: python json regex

在尝试弄清楚它时,我遇到了一些困难,这是使用Python将字符串转换为有效JSON的最佳方式。

基本上,我需要做的是从文件中读取一个字符串(已经以JSON格式给出),并将其转换为有效的JSON。在我的情况下,唯一的问题是最后一个对象之后的“”:

WebElement element = driver.findElement(By.xpath("//tr[starts-with(@class,'MuiTableRow')][@val='4']"));
    element.click();

这是我读取文件的方式:

    {
        "InputTable" : 
        [
            {
                "ServerName":"serverOne",
                "To":"userOne", 
                "CC":"", 
                "TemplateName":"LinuxTemplate" 
            },
            {
                "ServerName":"serverTwo",
                "To":"userTwo", 
                "CC":"userFive", 
                "TemplateName":"LinuxTemplateWithCC" 

            }, << get rid of this comma

        ],
        "Params": 
        [   

            {"Col_0":"Server","Col_1":"User","Col_2":"Action"}
        ]
    }

由于JSON无效,因此加载JSON文件失败。 您有什么建议吗,首先是如何去除最后一个逗号,其次是如何验证字符串并确保其格式正确?

4 个答案:

答案 0 :(得分:2)

您可以将其解析为YAML(其内联语法是JSON的更宽松的超集):

import yaml
data = yaml.load(open(json_file))

然后要获取有效的JSON,可以将对象转储回去:

import json
json.dumps(data)

答案 1 :(得分:0)

您可以使用jsoncomment https://pypi.python.org/pypi/jsoncomment

import json
from jsoncomment import JsonComment

with open('/nfs/somePath/LinuxInput.JSON') as json_file:    
    parser = JsonComment(json)
    data = parser.load(json_file)

答案 2 :(得分:0)

如果您的JSON除尾随逗号外均有效,则可以尝试使用更宽松的解析器,如其他解决方案所述。

如果您只想删除结尾的逗号,则此正则表达式应该有效。

(?<=[}\]"']),(?!\s*[{["'])

用空字符串替换所有出现的内容。

import re
regex = r'''(?<=[}\]"']),(?!\s*[{["'])'''
result = re.sub(regex, "", test_str, 0)

答案 3 :(得分:-1)

去那里:

= ^ .. ^ =

test_string = """{
    "InputTable" : 
    [
        {
            "ServerName":"serverOne",
            "To":"userOne", 
            "CC":"", 
            "TemplateName":"LinuxTemplate" 
        },
        {
            "ServerName":"serverTwo",
            "To":"userTwo", 
            "CC":"userFive", 
            "TemplateName":"LinuxTemplateWithCC" 

        },

    ],
    "Params": 
    [   

        {"Col_0":"Server","Col_1":"User","Col_2":"Action"}
    ]
}"""

test_string = re.sub("},\n\n", "}\n", test_string)
valid_jonson = json.loads(test_string)