我试图为bigquery API生成资源表示,以便将新表(/ view)插入到我们的一个数据库中。我这样做的总体方法是创建json的头(在架构元素之前的所有内容,即不需要迭代的东西),json的页脚(架构元素之后的所有内容),和json的中间部分。所以我的整体问题是如何将一堆单独的JSON组合在一起创建一个JSON? (例如输出json = headerJson + bodyJson + footerJson)
作为其中的一个子问题,我如何创建json的body部分。我的方法是遍历dict中的项列表,使用dict中的键和值来填充json,然后将每个单独的元素附加到字典中,然后我可以将其转换为字符串。
e.g。
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(outputsJson)) )),我得到json中的每个元素双重转义。所以我理解(或者我不是......)当你试图抛弃一个已经是json的json时你会得到那个结果,但在这种情况下我有一个单独的jsons列表,而不是一个json。
除非jsons列表是json。对不起,如果我是个傻瓜。
答案 0 :(得分: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)