场景:
我需要将python字典结构(在前面的步骤中构造)的列表中的键和值提取到嵌套在JSON对象中的相应“字段”和“值” JSON数组中。
这是我正在生成的复杂JSON字符串的一部分,其中有多个嵌套在迭代器中的for循环迭代器,但是此键值对是棒棒糖的中心位置,也是我卡住的部分,我不知道如何中断将键和值分成相应的数组。以下是我能够返回的部分,但这只是在单个“字段”数组中返回各个字典结构:
root@laravel-dropin:/var/www/html/resources# node js/test.js
data appended
[Function: writeFile]
我想尽办法尝试打破这一点,下面只是许多失败的尝试之一:
"table": "name",
"inserts": [
{
"fields": [
{
"id": 1,
"name": "National Monument"
}
]
}
]
这是我需要返回的内容(请忽略任何无效的JSON,而只关注将键值对提炼为单独的JSON数组)。
nameList = [ {'id': 1, 'name': 'National Monument'}, {'id': 1, 'name': "Joe's Bar"} ]
result = []
i = 0
for d in nameList:
for k, v in d.items():
result[i]["inserts"].append({"fields":k})
result[i]["inserts"].append({"values":v})
i += 1
pprint(result)
答案 0 :(得分:0)
尝试类似的方法(根据您的原始结构做出决定):
fields = []
values = []
for str in struct_s["inserts"][0]["fields"]:
for k,v in str.items():
fields.append(k)
values.append(v)
struct_n = {"table": "name"}
struct_n["inserts"] = [{"fields":fields,"values":values}]
print (struct_n)
输出
{'table': 'name', 'inserts': [{'fields': ['id', 'name'], 'values': [1, 'National Monument']}]}
答案 1 :(得分:0)
嗨,我不确定您是否正在寻找类似的东西
nameList = [ {'id': 1, 'name': 'National Monument'}, {'id': 1, 'name': 'Joe\'s Bar'} ]
inserts = [None] * len(nameList)
i = 0
for d in nameList:
inserts[i] = {"fields" : [],"values" : []}
for k, v in d.items():
inserts[i]["values"].append(v)
inserts[i]["fields"].append(k)
i+=1
result = {"table": "name"}
result["inserts"] = inserts
print(result)
OutPut
{'table': 'name', 'inserts': [{'fields': ['id', 'name'], 'values':[1, 'National Monument']}, {'fields': ['id', 'name'], 'values': [1, "Joe's Bar"]}]}
答案 2 :(得分:0)
咨询了我组织中比我有更多经验的人,并提出了以下建议:
constJSON = []
i = 0
for k, v in dictNorm.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
输出(部分,因为这是一个大字符串,它在表示源数据库表和列或元组的字典结构的多个列表上进行迭代)。
[{'table': 'place_nm', 'inserts': [{'fields': ['id', 'name'], 'values': [1, u'National Monument']}, ...