【问题标题】:How to parse json elements using python?如何使用python解析json元素?
【发布时间】:2016-01-13 03:59:22
【问题描述】:

我使用 opener.open 方法获得了 json 数据。现在我想引用它的 elmentS。我尝试了以下代码,但出现错误!此外,我只想为 link2 获取 token= 的值。任何人都可以帮我解决这个错误并获得令牌的价值吗?提前致谢。

代码:

   resp2 = opener.open('http://somewebsite.com/test/id',post_data)
      print resp2.read()
      Response = resp2.read();
      j_obj = json.load(Response)
      print j_obj['link2']

错误:

ERROR: EXCEPTION Thrown (PythonToCppException) : 
-->Python callback/script returned the following error<--
- NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
Error Type: <type 'exceptions.AttributeError'>
Error Contents: 'str' object has no attribute 'read'
j_obj = json.load(Response)
 line 286, in load
return loads(fp.read(),
AttributeError: 'str' object has no attribute 'read'
 -->End of Python script error report<--

json 数据:

{
        "id": 1,
        "name": "Test World",
        "link1": "rtmp:\/\/me.someWebsite.com:1234\/static\/testWorld1?token=123456789abcdefghijklmnopqr&e=987654321&u=99999",
        "link2": "http:\/\/me.someWebsite.com:1234\/testWorld1\/index.m3u8?token=123456789abcdefghijklmnopqr&e=987654321&u=99999&channel=testWorld1",
        "image": "http:\/\/me.someWebsite.com\/img\/1\/2\/3\/4\/56.png",
        "net": "rtmp:\/\/me.someWebSite.com:1234\/static",
        "url": "testWorld1?token=123456789abcdefghijklmnopqr&e=987654321&u=99999",
        "favorite": false,
        "date": "2014-05-1"
    }

【问题讨论】:

  • json.load() 用于文件类型对象,json.loads() 用于字符串。

标签: python json parsing xbmc kodi


【解决方案1】:

执行以下操作 - 请注意 resp2 已经是 string

resp2 = opener.open('http://somewebsite.com/test/id',post_data)
print resp2  # You can verify you are receiving JSON data here.
j_obj = json.loads(resp2)
print j_obj['link2']

【讨论】:

  • 感谢您的回复。我现在尝试了,现在出现此错误:错误类型: 错误内容:无法解码 JSON 对象 Traceback(最近一次调用):
  • 打印您收到的字符串。发布它包含的内容。
  • 非常感谢我删除了 Response = resp2.read();并使用 resp2 现在我得到了 link2 的值。我如何获得该链接 2 上令牌的值?(token=123456789abcdefghijklmnopqr)
  • 您需要使用正则表达式。试试import re; re.search(r"token=(\w+)", j_obj['url']).group(1)
  • 如果url 没有令牌,就会发生这种情况。确保验证它确实如此。
【解决方案2】:

您可以尝试使用不同的方法,

  import urllib2

  post_data = ...
  fp = urllib2.urlopen('http://somewebsite.com/test/id', post_data)
  resp = fp.read()
  print(resp)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多