Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json键值与文本文件属性匹配-Python_Python_Json_Encryption - Fatal编程技术网

Json键值与文本文件属性匹配-Python

Json键值与文本文件属性匹配-Python,python,json,encryption,Python,Json,Encryption,我有一个巨大的json文件,格式如下,我想加密特定标记中的特定值,而不必硬编码密钥或属性名称。但我无法用json映射文本值。有人能帮我解决这个问题吗 Output.txt { "layer1": [ { "name": "abc", "element": "Ether Element&q

我有一个巨大的json文件,格式如下,我想加密特定标记中的特定值,而不必硬编码密钥或属性名称。但我无法用json映射文本值。有人能帮我解决这个问题吗

    Output.txt
    {
        "layer1": [
            {
                "name": "abc", 
                "element": "Ether Element", 
                "inter": "Intrawork"
            }, 
            {
                "desc": "Some random desc", 
                "name": "cdf", 
            }
        ],
        "layer2": [
            {
                "cs": 12, 
                "Policy": "VODAFONED2GMBH48491-G0/3/1:10-NTE-INGRESS", 
                "class": "class-default"
            }
        ]
    }
    
    Encrypt.txt
    layer1  name
    layer2  class
    layer2  Policy
    
代码:


因此,基本上您希望从Encrypt.txt读取json的密钥,其中字符串需要加密。 理论上:

对于每一行标记,我们尽可能深入地研究每个标记。如果我们所在的当前层恰好是一个数组,我们将进入每个数组元素,然后再次尽可能深入,直到到达当前行的最后一个标记。要么我们到达我们想要的标签,要么沿途某个地方没有标签,我们忽略了这个情况

此逻辑可以像这样递归完成:

导入json
导入hashlib
def加密(层,行,i=0):
尝试:
如果i==len(行)-1:
如果类型(图层)为列表:
对于层中的条目:
条目[row[i]]=hashlib.sha256(条目[row[i]].encode('utf-8')).hexdigest()
其他:
layer[row[i]]=hashlib.sha256(layer[row[i]].encode('utf-8')).hexdigest()
返回
如果类型(图层)为列表:
对于层中的条目:
加密(条目[行[i]],行,i+1)
其他:
加密(层[行[i]],行,i+1)
除:
通过
行=[]
将open('Encrypt.txt','r')作为f:
对于f中的行:
行=行。拆分()
第[0]行=str(第[0]行)
第[1]行=str(第[1]行)
行。追加(行)
将open(“my json.json”,“r+”)作为json_文件:
d=json.load(json_文件)
对于行中的行:
加密(d行)
将open('output_encrypted.txt',“w”)作为json_文件:
dump(d,json_文件,缩进=4)
在这里,您可以看到在encrypt函数中完成了递归。在那里,我们首先传递字典(或json)和当前行数组,然后根据当前访问的层是否是数组,再次调用下一层或多层的函数。 最初的try-except是为了避免不存在的条目破坏我们的代码

例如,如果您的json要这样修改:

{
    "layer1": [
        {
            "name": "abc",
            "element": "Ether Element",
            "inter": "Intrawork"
        },
        {
            "desc": "Some random desc",
            "name": "cdf"
        },
        {
            "desc": "Some other random desc"
        }
    ],
    "layer2": [
        {
            "cs": 12,
            "Policy": "VODAFONED2GMBH48491-G0/3/1:10-NTE-INGRESS",
            "class": "class-default"
        }
    ]
}
如果不使用try/except,代码将导致错误。当然,如果需要,可以用appropiate if语句替换

旁注:这里的“encrypt”一词应该重命名为“encode”(散列是一种编码形式,而不是加密)

{
    "layer1": [
        {
            "name": "abc",
            "element": "Ether Element",
            "inter": "Intrawork"
        },
        {
            "desc": "Some random desc",
            "name": "cdf"
        },
        {
            "desc": "Some other random desc"
        }
    ],
    "layer2": [
        {
            "cs": 12,
            "Policy": "VODAFONED2GMBH48491-G0/3/1:10-NTE-INGRESS",
            "class": "class-default"
        }
    ]
}