Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.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
使用Python创建复杂的JSON,创建一些嵌套数组是有条件的_Python_Json_Ordereddictionary_Ordereddict - Fatal编程技术网

使用Python创建复杂的JSON,创建一些嵌套数组是有条件的

使用Python创建复杂的JSON,创建一些嵌套数组是有条件的,python,json,ordereddictionary,ordereddict,Python,Json,Ordereddictionary,Ordereddict,在使用Python动态创建较大JSON字符串的一部分时,我希望仅当更高级别的值(在我的示例中是表名)是特定值时,才添加一个对象(嵌套的字典包含列表和字典,或者最终在转换为JSON时包含对象和数组) 到目前为止,该结构是一个TNFL,我希望有条件地向该结构添加另一个对象以及“字段”和“值” 到目前为止,我所拥有的: constJSON = [] i = 0 for k, v in datDictNorm.iteritems(): constJSON.append({"table":k, "

在使用Python动态创建较大JSON字符串的一部分时,我希望仅当更高级别的值(在我的示例中是表名)是特定值时,才添加一个对象(嵌套的字典包含列表和字典,或者最终在转换为JSON时包含对象和数组)

到目前为止,该结构是一个TNFL,我希望有条件地向该结构添加另一个对象以及“字段”和“值”

到目前为止,我所拥有的:

constJSON = []
i = 0
for k, v in datDictNorm.iteritems():
    constJSON.append({"table":k, "inserts":[]})
    if v:
        for d in v:
            flds = list(d.keys())
            constJSON[i]["inserts"].append({
                              "fields": flds,
                              "values": [d[f] for f in flds]
            })
        i += 1
当表“k”等于“table_x”时,我需要最内部的.append/for循环,以便在名为“nestedTableInsert”的“fields”和“values”对象之外添加另一个对象/值“它有自己的.append函数,该函数将在我的最终JSON中为特定表创建另一个层,使其看起来像这样,但语法正确:

我要做的是:

constJSON = []
i = 0
for k, v in datDictNorm.iteritems():
    constJSON.append({"table": k, "inserts": []})
    if v:
        for d in v:
                flds = list(d.keys())
        if k != "name":
            constJSON[i]["inserts"].append({
                    "fields": flds,
                    "values":  [d[f] for f in flds]})
        else:
            for k2, v2 in prvDictNorm.iteritems():
                constJSON[i]["inserts"].append({
                    "fields": flds,
                    "values":  [d[f] for f in flds],
                    "nestedTableInsert": []})

        i += 1
添加了“nestedTableInsert”:对象的结构与其父insert对象相同,因此最终的JSON看起来像(特别是ea唯一名称的“nestedTableInserts”):


90%的情况下,创建的嵌套表插入的字段和值数组使用相同的记录信息填充,而不是创建与每个父位置插入关联的唯一嵌套表插入记录信息。仍然需要找出这个最内层的迭代

tableInsert = []
i = 0
for k, v in mainDictNorm.iteritems():
    tableInsert.append({"table": k, "inserts": []})
    if v:
        for d in v:
            flds = list(d.keys())
            if k != "place_nm":
                tableInsert[i]["inserts"].append({
                    "fields": flds,
                    "values":  [d[f] for f in flds]})
            else:
                i = 0
                nestedTableInsert = []
                for k2, v2 in nestDictNorm.iteritems():
                    nestedTableInsert.append({"table": k2, "inserts": []})
                    if v2:
                        for d2 in v2:
                            flds2 = list(d2.keys())
                    tableInsert[i],nestedTableInsert[i]["inserts"].append({
                        "fields": flds2,
                        "values":  [d2[f2] for f2 in flds2]})
                    i += 1
                tableInsert[i]["inserts"].append({
                    "fields": flds,
                    "values":  [d[f] for f in flds],
                    "nestedTableInsert": nestedTableInsert})
        i += 1

这接近我怀疑的目标。我没有提到的一件重要事情是,用于填充nestedTableInsert字段和值[Array]的数据是从一个单独的字典调用的,而不是从用于构造主结构的字典调用的,因此我需要执行两个source.iteritems()调用。
constJSON = []
i = 0
for k, v in datDictNorm.iteritems():
    constJSON.append({"table": k, "inserts": []})
    if v:
        for d in v:
            flds = list(d.keys())
            constJSON[i]["inserts"].append({
                "fields": flds,
                "values": [d[f] for f in flds]
            })
            if k == "table_x":
                constJSON[i]["nestedTableInsert"].append({
                    "fields": flds2,
                    "values": [d2[f2] for f2 in flds2 if k in thing]
                })
        i += 1

myJSON = json.dumps(constJSON)
tableInsert = []
i = 0
for k, v in mainDictNorm.iteritems():
    tableInsert.append({"table": k, "inserts": []})
    if v:
        for d in v:
            flds = list(d.keys())
            if k != "place_nm":
                tableInsert[i]["inserts"].append({
                    "fields": flds,
                    "values":  [d[f] for f in flds]})
            else:
                i = 0
                nestedTableInsert = []
                for k2, v2 in nestDictNorm.iteritems():
                    nestedTableInsert.append({"table": k2, "inserts": []})
                    if v2:
                        for d2 in v2:
                            flds2 = list(d2.keys())
                    tableInsert[i],nestedTableInsert[i]["inserts"].append({
                        "fields": flds2,
                        "values":  [d2[f2] for f2 in flds2]})
                    i += 1
                tableInsert[i]["inserts"].append({
                    "fields": flds,
                    "values":  [d[f] for f in flds],
                    "nestedTableInsert": nestedTableInsert})
        i += 1