AttributeError:“unicode”对象在分析JSON字典值时没有属性“values”

2024-09-22 11:41:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下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替换print mysubvalue.values()行,但是这会导致以下错误:

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()函数。如果是的话,我不知道为什么我会犯这个错误。

有人能帮忙吗?

谢谢


Tags: in字典periodvaluesprintverticalhorizontaljerseynumbers
2条回答

您正在迭代JSON字典的键,然后对每个键调用.values()。

for myvalue in myjsonobject:

在键上迭代。所以当你得到一个字符串的键时,比如说,u'period':16,它会打印'period'。values(),它会弹出这个错误,因为string类没有.values()。

如果您想将整个JSON字典展平到任意深度,我建议使用递归方法。

如果遍历字典本身(对于myjsonobject中的myvalue),则将遍历字典的键。当使用for循环时,无论是在dict(myjsonobject)本身、myjsonobject.keys()还是myjsonobject.iterkeys()上循环,行为都将相同。dict.iterkeys()通常更可取,因为它是明确和有效的:

for myvalue in myjsonobject.iterkeys():

相关问题 更多 >