使用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看起来像(特别是“ nestedTableInserts”为唯一的名称):

[{
            "table": "place",
            "inserts": [{
                "fields": [
                    "id",
                    "alt_id"
                ],
                "values": [
                    1,
                    1
                ]
            }]
        },
        {
            "table": "data_source",
            "inserts": [{
                "fields": [
                    "id",
                    "col_nm_1",
                    "col_val_1",
                    "valid_from_date",
                    "valid_to_date"
                ],
                "values": [
                    1,
                    "xyz",
                    "1234",
                    "2019-04-16T00:00:00.000Z",
                    "2020-04-16T00:00:00.000Z"
                ]
            }]
        },
        {
            "table": "type",
            "inserts": [{
                "fields": [
                    "id",
                    "alt_id",
                    "type_id",
                    "some_num"
                ],
                "values": [
                    2,
                    1,
                    1,
                    1
                ]
            }]
        },
        {
            "table": "name",
            "inserts": [{
                    "fields": [
                        "some_num",
                        "some_id",
                        "some_other_id",
                        "name"
                    ],
                    "values": [
                        2,
                        1,
                        1,
                        "Minnie Mouse Town"
                    ],
                    "nestedTableInsert": {
                        "table": "prv_feat_nm_li",
                        "inserts": [{
                            "fields": [
                                "id",
                                "col_nm_1",
                                "col_val_1",
                                "nm_type",
                                "nm_ns",
                                "sys_rank",
                                "user_rank",
                                "some_abbr",
                                "some_info",
                                "valid_from_date",
                                "valid_to_date"
                            ],
                            "values": [
                                1,
                                "xyz",
                                "12345",
                                "C",
                                "Minnie Mouse Town",
                                "1",
                                "1",
                                "Q",
                                "Maybe some info here.",
                                "2019-04-16T00:00:00.000Z",
                                "2020-04-16T00:00:00.000Z"
                            ]
                        }]
                    }
                },
                {
                    "fields": [
                        "some_num",
                        "some_id",
                        "some_other_id",
                        "name"
                    ],
                    "values": [
                        2,
                        1,
                        1,
                        "Mickey Mouse Town"
                    ],
                    "nestedTableInsert": {
                        "table": "prv_feat_nm_li",
                        "inserts": [{
                            "fields": [
                                "id",
                                "col_nm_1",
                                "col_val_1",
                                "nm_type",
                                "nm_ns",
                                "sys_rank",
                                "user_rank",
                                "some_abbr",
                                "some_info",
                                "valid_from_date",
                                "valid_to_date"
                            ],
                            "values": [
                                1,
                                "uni",
                                "12346",
                                "C",
                                "Mickey Mouse Town",
                                "1",
                                "1",
                                "Z",
                                "Maybe some info here.",
                                "2019-04-16T00:00:00.000Z",
                                "2020-04-16T00:00:00.000Z"
                            ]
                        }]
                    }
                }
            ]
        },
        {
            "table": "geometry",
            "inserts": [{
                "fields": [
                    "id",
                    "some_other_id",
                    "created",
                    "longitude",
                    "latitude",
                    "shape"
                ],
                "values": [
                    1,
                    1,
                    "No",
                    55.5555555,
                    8.8888888,
                    "POINT(55.5555555 8.8888888)"
                ]
            }]
        }
    ]
基尔肖

在那里有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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章