迭代字典以创建单个json

时间:2015-10-21 20:57:55

标签: python json dictionary

我试图为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。对不起,如果我是个傻瓜。

1 个答案:

答案 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)