在使用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] 删除。
我来说两句