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

在使用 Python 动态创建较大 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'的“字段”和“值”对象之外,它有自己的.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”:对象的结构与其父插入对象相同,因此最终的 JSON 看起来像


手掌心
浏览 258回答 2
2回答

长风秋雁

90% 的情况是这样,但是正在创建的嵌套表插入的字段和值数组填充了相同的记录信息,而不是创建与每个父 place_nm 插入关联的唯一nestedTableInsert 记录信息。仍然需要弄清楚这个最内层的迭代。tableInsert = []i = 0for 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

临摹微笑

constJSON = []i = 0for 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 += 1myJSON = json.dumps(constJSON)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python