递归存储JSON属性

时间:2019-03-04 13:08:51

标签: python json python-3.x

我想将JSON属性存储在字典中或列出将其存储为最佳选择的任何内容。 JSON如下所示:

{
"@BOOLOP": "and",
"@SEQ": "0",
"@TYPE": "0",
"FRAGMENT": {
    "@FUNC1": "value",
    "@FUNC2": "literal",
    "@OP": "<",
    "@PROP1": "PB:FeederSpeed",
    "@PROP2": "0",

},
"BOOLOP": {
    "@BOOLOP": "or",
    "FRAGMENT": [
        {
            "@FUNC1": "value",
            "@FUNC2": "literal",               
            "@OP": "=",
            "@PROP1": "PB:CPProdSelected",
            "@PROP2": "1000",
        }

    ]
}
}

此JSON的基本格式是,将具有BOOLOP修饰符,然后是FRAGMENT键(取决于),后跟n no。 BOOLOP作为键。

我正在努力解决的问题是如何将其存储在合适的数据结构中,以便于对其执行操作。

例如,我需要对FRAGMENT键进行操作,但是为此,我需要检查其是否满足所有条件。就像@BOOLOPandor一样,并且由于密钥内有多个BOOLOP键,因此很难对其进行操作。

到目前为止,我是通过从沼泽JSON中提取所需的JSON部分来实现这一目标的,但是现在我陷入了如何进行递归调用并检查FRAGMENT是否在BOOLOP内的问题。 / p>

我发布的JSON只是原始文件中的一个示例,可以有n个@BOOLOP,但是我可以在第一个示例到位后弄清楚那部分。

编辑

我考虑过将JSON存储在树中 Tree Scenario

1 个答案:

答案 0 :(得分:0)

正如您所说,在json中有多个BOOLOP键,最好将json的BOOLOP键的所有值附加到列表中,这将导致字典列表。

现在,您可以遍历该词典列表,并检查每个元素是否FRAGMENT键在该项目内。

考虑一下,它是由json的多个BOOLOP键组成的词典的示例列表:

a = [{
"@BOOLOP": "or",
"FRAGMENT": [
    {
        "@FUNC1": "value",
        "@FUNC2": "literal",               
        "@OP": "=",
        "@PROP1": "PB:CPProdSelected",
        "@PROP2": "1000",
    }
    ]
},
{
"@BOOLOP": "and",
"FRAGMENT": [
    {
        "@FUNC1": "va1lue",
        "@FUNC2": "lite56ral",               
        "@OP": "=0",
        "@PROP1": "P85B:CPProdSelected",
        "@PROP2": "10000",
    }
    ]
}

现在在此列表中检查:

for i in a:
    # Check if "@BOOLOP" key is in i, if present then proceed
    if "@BOOLOP" in i:
        if "FRAGMENT" in i:
            # Perform operations on "FRAGMENT" key