修改json字符串进入列表或字典?

时间:2016-11-30 16:34:21

标签: python json dictionary

我是Python的新手,正在修改一些现有的代码。

有一个JSON字符串进入Python函数,如下所示:

{"criteria": {"modelName":"='ALL'", "modelName": "='NEW'","fields":"*"}}

现在看来,字典正用于创建字符串:

crit=data['criteria']
for crit_key in crit 
   crit_val = crit[crit_key]
   sql+ = sql+= ' and ' + crit_key + crit_val 

打印sql字符串时,只显示最后一个'modelName'。看起来像一个字典被用作modelName是一个键,所以第二个modelName覆盖了第一个?我希望最后的“sql”字符串包含两个modelNames。

1 个答案:

答案 0 :(得分:0)

因OP评论

而被编辑

好吧,如果你不能更新你的JSON并且必须处理。

你可以做类似的事情:

data = '{"criteria": {"modelName":"=\'ALL\'", "modelName": "=\'NEW\'","fields":"*"}}'

import json

def dict_raise_on_duplicates(ordered_pairs):
    d = {}
    duplicated = []
    for k, v in ordered_pairs:
        if k in d:
            if k not in duplicated:
                duplicated.append(k)
                d[k] = [d[k]] + [v]
            else:
                d[k].append(v)
        else:
            d[k] = v
    return d

print json.loads(data, object_pairs_hook=dict_raise_on_duplicates)

在此示例中,data是具有重复键的JSON字符串。 根据{{​​3}},我只强制json.load来处理重复的密钥。

如果发现重复的密钥,它将创建一个包含当前密钥数据的新列表并添加新值。 之后,它只会在创建的列表中追加新闻值。

输出:

{u'criteria': {u'fields': u'*', u'modelName': [u"='ALL'", u"='NEW'"]}}

无论如何你必须更新你的代码,但现在你可以处理它了。