为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

手掌心 2022-01-18 17:44:24
在使用 Python 动态创建较大 JSON 字符串的一部分时,我想仅在更高级别的值(在我的情况下为表名)为一个特定的值。到目前为止的结构是一个 TNFL,我想有条件地将另一个对象与“字段”和“值”一起添加到结构中。到目前为止我所拥有的: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]            })        i += 1当表'k'等于'table_x'时,我需要最里面的.append / for循环来添加另一个对象/值,除了名为'nestedTableInsert'的“字段”和“值”对象之外,它有自己的.append函数在我的最终 JSON 中仅为特定表创建另一个层,使其看起来像这样,但语法正确:我想要做的工作:constJSON = []i = 0for 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 看起来像
查看完整描述

2 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

90% 的情况是这样,但是正在创建的嵌套表插入的字段和值数组填充了相同的记录信息,而不是创建与每个父 place_nm 插入关联的唯一nestedTableInsert 记录信息。仍然需要弄清楚这个最内层的迭代。


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


查看完整回答
反对 回复 2022-01-18
?
临摹微笑

TA贡献1982条经验 获得超2个赞

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)


查看完整回答
反对 回复 2022-01-18
  • 2 回答
  • 0 关注
  • 257 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信