AttributeError: 'unicode' object has no attribute 'values' when parsing JSON dictionary values
AttributeError: 'unicode' object has no attribute 'values' when parsing JSON dictionary values
我有以下 JSON 词典:
{
u'period': 16, u'formationName': u'442', u'formationId': 2,
u'formationSlots': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0, 0, 0, 0, 0, 0],
u'jerseyNumbers': [1, 20, 3, 15, 17, 5, 19, 6, 18, 25, 10, 2, 4, 12, 16, 22, 24,
34],
u'playerIds': [23122, 38772, 24148, 39935, 29798, 75177, 3860, 8505,
26013, 3807, 34693, 18181, 4145, 23446, 8327, 107395, 29762, 254558],
u'captainPlayerId': 29798,
u'startMinuteExpanded': 0,
u'endMinuteExpanded': 82,
u'formationPositions': [{u'horizontal': 5.0, u'vertical': 0.0},
{u'horizontal': 1.0, u'vertical': 2.5}, {u'horizontal': 9.0, u'vertical': 2.5},
{u'horizontal':3.5, u'vertical': 6.0}, {u'horizontal': 3.5, u'vertical': 2.5},
{u'horizontal': 6.5, u'vertical': 2.5}, {u'horizontal': 1.0, u'vertical': 6.0},
{u'horizontal': 6.5, u'vertical': 6.0}, {u'horizontal': 6.5, u'vertical': 9.0},
{u'horizontal': 3.5, u'vertical': 9.0}, {u'horizontal': 9.0, u'vertical': 6.0}]
}
如您所见,一些字典值包含在列表中。我正在尝试以编程方式从该对象获取所有值,如下所示:
for myvalue in myjsonobject:
print mydict
for mysubvalue in myvalue:
print mysubvalue
这将打印字典键:
period
formationName
formationId
formationSlots
jerseyNumbers
playerIds
captainPlayerId
startMinuteExpanded
endMinuteExpanded
formationPositions
当我真正想要的是价值观。我尝试用 print mysubvalue.values()
替换 print mysubvalue
行,但这会导致以下错误:
Traceback (most recent call last):
File "C:\Python27\counter.py", line 78, in <module>
print mysubdict.values()
AttributeError: 'unicode' object has no attribute 'values'
我在这里进行有根据的猜测,我不需要使用 json.loads(mysubdict)
来允许我访问 .values()
功能。如果是这样,我不确定为什么会收到此错误。
有人可以帮忙吗?
谢谢
您正在遍历 JSON 字典的键,然后在每个键上调用 .values()。
for myvalue in myjsonobject:
遍历键。所以当你得到一个字符串的键时,比方说,u'period' : 16,它会打印 'period'.values(),它会吐出字符串 class 的错误没有.values().
如果您想将整个 JSON 字典展平到任意深度,我建议使用递归方法。
如果您迭代字典本身(对于 myjsonobject 中的 myvalue),您将迭代字典的键。当使用 for 循环进行循环时,无论您遍历 dict
(myjsonobject) 本身、myjsonobject.keys()
还是 myjsonobject.iterkeys()
,行为都是相同的。 dict.iterkeys()
通常更可取,因为它明确且高效:
for myvalue in myjsonobject.iterkeys():
我有以下 JSON 词典:
{
u'period': 16, u'formationName': u'442', u'formationId': 2,
u'formationSlots': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0, 0, 0, 0, 0, 0],
u'jerseyNumbers': [1, 20, 3, 15, 17, 5, 19, 6, 18, 25, 10, 2, 4, 12, 16, 22, 24,
34],
u'playerIds': [23122, 38772, 24148, 39935, 29798, 75177, 3860, 8505,
26013, 3807, 34693, 18181, 4145, 23446, 8327, 107395, 29762, 254558],
u'captainPlayerId': 29798,
u'startMinuteExpanded': 0,
u'endMinuteExpanded': 82,
u'formationPositions': [{u'horizontal': 5.0, u'vertical': 0.0},
{u'horizontal': 1.0, u'vertical': 2.5}, {u'horizontal': 9.0, u'vertical': 2.5},
{u'horizontal':3.5, u'vertical': 6.0}, {u'horizontal': 3.5, u'vertical': 2.5},
{u'horizontal': 6.5, u'vertical': 2.5}, {u'horizontal': 1.0, u'vertical': 6.0},
{u'horizontal': 6.5, u'vertical': 6.0}, {u'horizontal': 6.5, u'vertical': 9.0},
{u'horizontal': 3.5, u'vertical': 9.0}, {u'horizontal': 9.0, u'vertical': 6.0}]
}
如您所见,一些字典值包含在列表中。我正在尝试以编程方式从该对象获取所有值,如下所示:
for myvalue in myjsonobject:
print mydict
for mysubvalue in myvalue:
print mysubvalue
这将打印字典键:
period
formationName
formationId
formationSlots
jerseyNumbers
playerIds
captainPlayerId
startMinuteExpanded
endMinuteExpanded
formationPositions
当我真正想要的是价值观。我尝试用 print mysubvalue.values()
替换 print mysubvalue
行,但这会导致以下错误:
Traceback (most recent call last):
File "C:\Python27\counter.py", line 78, in <module>
print mysubdict.values()
AttributeError: 'unicode' object has no attribute 'values'
我在这里进行有根据的猜测,我不需要使用 json.loads(mysubdict)
来允许我访问 .values()
功能。如果是这样,我不确定为什么会收到此错误。
有人可以帮忙吗?
谢谢
您正在遍历 JSON 字典的键,然后在每个键上调用 .values()。
for myvalue in myjsonobject:
遍历键。所以当你得到一个字符串的键时,比方说,u'period' : 16,它会打印 'period'.values(),它会吐出字符串 class 的错误没有.values().
如果您想将整个 JSON 字典展平到任意深度,我建议使用递归方法。
如果您迭代字典本身(对于 myjsonobject 中的 myvalue),您将迭代字典的键。当使用 for 循环进行循环时,无论您遍历 dict
(myjsonobject) 本身、myjsonobject.keys()
还是 myjsonobject.iterkeys()
,行为都是相同的。 dict.iterkeys()
通常更可取,因为它明确且高效:
for myvalue in myjsonobject.iterkeys():