问题描述
我正在尝试为bigquery API生成资源表示形式,以将新表(/ view)插入我们的数据库之一。 我这样做的总体方法是创建json的标头(架构元素之前的所有内容,即不需要迭代的内容),json的页脚(架构元素之后的所有内容)以及json的中间部分。 因此,我的总体问题是如何将一堆单独的JSON组合在一起以创建单个JSON? (例如,输出json = headerJson + bodyJson + footerJson)
作为其中的一个子问题,我如何创建json的主体部分。 我的方法是遍历字典中的项目列表,使用字典中的键和值填充json,然后将这些单独元素附加到字典中,然后将其转换为字符串。
例如
def generateFieldJsonForSchema(d, query, db="defaultDb", dataset="dataset", tableId="table"):
jsonDict=[]
for name, type in d.iteritems():
jsonDict.append(str(json.dumps({"name":name, "type":type, "mode":"NULLABLE"})))
return jsonDict
但是,当我这样做并尝试将结果输出转换回字符串,然后将其转储回json(例如json.dumps(str(','。join(outputtedJson))))时,我得到了每个元素在JSON中转义。 因此,我了解(也许我不知道...),当您尝试转储已经是json的json时,会得到该结果,但是在这种情况下,我有一个单独的json列表,而不是单个json。
除非json列表是json。 对不起,如果我是个白痴。
1楼
构建一个包含所有部分的Python对象 ,然后将该对象转换为JSON。 不要串联不同的JSON对象:
def generateFieldJsonForSchema(d, query, db="defaultDb", dataset="dataset", tableId="table"):
objects = []
for name, type in d.iteritems():
objects.append({"name": name, "type": type, "mode": "NULLABLE"})
return objects
该函数返回包含字典的Python列表 。 将其他对象添加到该列表(您的页眉和页脚),然后在最后一个可能的时刻将该列表转换为JSON:
fields = generateFieldJsonForSchema(input_dictionary, query)
final_results = [header_object] + fields + [footer_object]
json_result = json.dumps(final_results)