我是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。
答案 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'"]}}
无论如何你必须更新你的代码,但现在你可以处理它了。