【问题标题】:How to get data from json using python如何使用python从json中获取数据
【发布时间】:2014-07-04 04:19:05
【问题描述】:

json:

{"id":"1","name":"Smokey Mountain Ski Club","terrain_park":"Unknown","night_skiing":"Unknown","operating_status":"Unknown","latitude":52.977947,"longitude":-66.92094,"user":{"id":"7","username":"skier"},"tags":[{"id":"1","name":"Downhill"}],"ski_maps":[{"id":"902"}],"open_ski_maps":[],"created":"2008-04-13T00:11:59+00:00","regions":[{"id":"335","name":"Newfoundland and Labrador"}]}

我已经这样做了,以便将此数据存储在“数据”变量中..

我正在尝试输出所有数据,例如:“key”:“value”列表

for q in data:
print q + ': ' data[q]

这段代码输出:

night_skiing: Unknown
name: Smokey Mountain Ski Club

Traceback (most recent call last):
TypeError: coercing to Unicode: need string or buffer, list found

我明白这个错误是什么,但我不知道如何解决它..

所以我的问题是如何将这个数组中的所有数据放入变量中?

【问题讨论】:

  • 您是否故意避免导入 json 模块,而使用 json.loads?
  • 这不是json 问题,它是一个输出格式问题
  • 您没有说明如何加载json数据,您发布的代码示例在两行中有两个语法错误(缩进和缺少+),您的错误与此无关使用 JSON,您显然没有彻底搜索收到的错误消息。下次请花更多的精力研究和提出您的问题...
  • 是的,有一些错误..我主要关注这个输出,但还是谢谢

标签: python arrays json


【解决方案1】:

例如当q == tags,您的print 行变为:

print "tags" + ': ' + [{"id":"1","name":"Downhill"}]

Python 是强类型的,因此您不能将(unicode)字符串与列表隐式连接。您需要明确说明您想要发生的事情,即列表 (data[q]) 应转换为字符串:

print q + ': ' str(data[q])

或者,更好的是,使用str.format 而不是字符串连接(或老式的% 格式):

print "{0}: {1}".format(q, data[q])

【讨论】:

    【解决方案2】:

    这里有一个小例子:

    import json
    
    try:
      # parse JSON string from socket
      p = json.loads(msg)
    except (ValueError, KeyError, TypeError):
      logging.debug("JSON format error: " + msg.strip() )
    else:
      # remote control is about controlling the model (thrust and attitude)
      com = "%d,%d,%d,%d" % (p['r'], p['p'], p['t'], p['y'])
    

    【讨论】:

      【解决方案3】:

      问题在于,并非所有数据值都是字符串,而是将它们视为字符串。 使用 str 格式会将值转换为字符串。试试这个:

      for q in data.iteritems():
          print '%s: %s' % q
      

      【讨论】:

        【解决方案4】:
        import json
        
        data = '{"id":"1","name":"Smokey Mountain Ski Club","terrain_park":"Unknown","night_skiing":"Unknown","operating_status":"Unknown","latitude":52.977947,"longitude":-66.92094,"user":{"id":"7","username":"skier"},"tags":[{"id":"1","name":"Downhill"}],"ski_maps":[{"id":"902"}],"open_ski_maps":[],"created":"2008-04-13T00:11:59+00:00","regions":[{"id":"335","name":"Newfoundland and Labrador"}]}'
        
        dataDict = json.loads(data)
        
        for key in dataDict.keys():
            print key + ': ' + str(dataDict[key])
        

        【讨论】:

        • 这也有效!谢谢..但还有一件事:返回时(标签:[{u'id':u'1',u'name':u'Downhill'}]),我如何从中获取“名称”字段线?我尝试了很多方法,但我做不到:(
        • dataDict['tags'] 指向一个数组。我怀疑 dataDict['tags'][0]['name'] 会起作用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-06
        • 2021-06-22
        • 2018-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多