为什么我的 json 结果包含两个同名的部分?
Why my json result contains two sections with the same name?
我使用以下代码从字符串值中获取 json,更新它并将 return 返回为字符串(使用 simplejson
):
if text:
qj = json.loads(text)
else:
qj = json.loads('{}')
if not qj.get(counter):
qj[counter] = {}
if not qj.get(counter).get('values'):
qj[counter]['values'] = []
if not value in qj[counter]['values']: # avoid duplicates
qj[counter]['values'].append(value)
text = json.dumps(qj)
如果我多次运行具有相同counter
值的函数(下例中的4
),为什么会得到以下结果:
{"4": {"values": ["test1"]}, "4": {"values": ["test2"]}}
创建的 4
部分的数量始终为 2。如果我第 3 次 运行 函数,则会更新第一个值(没有像我预期的那样添加)。
预期输出应该是:
{"4": {"values": ["test1", "test2", "test3"]}}
我的代码有什么问题?
如果您在第一次通过时有以下 json:
{4: {"values": ["test1"]}}
您将在 text = json.dumps(qj)
:
之后得到这个字符串
'{"4": {"values": ["test1"]}}'
现在,当使用 qj = json.loads(text)
加载 json 时,您会收到:
{'4': {'values': ['test1']}} # 4 has turned to '4'!
您检查 4
是否已经存在,但失败,因为它是一个数字。
所以为了解决你的问题,你可以在测试时将计数器简单地变成一个字符串:
if not qj.get(str(counter)):
...
此行为的原因是 json 不允许整数作为键,请参阅 JSON documentation 中 对 的定义:
pair
string : value
我使用以下代码从字符串值中获取 json,更新它并将 return 返回为字符串(使用 simplejson
):
if text:
qj = json.loads(text)
else:
qj = json.loads('{}')
if not qj.get(counter):
qj[counter] = {}
if not qj.get(counter).get('values'):
qj[counter]['values'] = []
if not value in qj[counter]['values']: # avoid duplicates
qj[counter]['values'].append(value)
text = json.dumps(qj)
如果我多次运行具有相同counter
值的函数(下例中的4
),为什么会得到以下结果:
{"4": {"values": ["test1"]}, "4": {"values": ["test2"]}}
创建的 4
部分的数量始终为 2。如果我第 3 次 运行 函数,则会更新第一个值(没有像我预期的那样添加)。
预期输出应该是:
{"4": {"values": ["test1", "test2", "test3"]}}
我的代码有什么问题?
如果您在第一次通过时有以下 json:
{4: {"values": ["test1"]}}
您将在 text = json.dumps(qj)
:
'{"4": {"values": ["test1"]}}'
现在,当使用 qj = json.loads(text)
加载 json 时,您会收到:
{'4': {'values': ['test1']}} # 4 has turned to '4'!
您检查 4
是否已经存在,但失败,因为它是一个数字。
所以为了解决你的问题,你可以在测试时将计数器简单地变成一个字符串:
if not qj.get(str(counter)):
...
此行为的原因是 json 不允许整数作为键,请参阅 JSON documentation 中 对 的定义:
pair
string : value