При использовании 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, чтобы добавить еще один объект / значение в дополнение кОбъект «fields» и «values» с именем 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» для eaуникальное имя):
[{
"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)"
]
}]
}
]