python解析jsonp格式数据

解决方法:最近在调用一些api时发现返回的是jsonp格式的数据,这些数据的格式基本是这样:callback&&callback(json_data)因为json数据中没有括号,所以我们可以使用正则表达式把json_data提取出来。代码:import redef loads_jsonp(_jsonp): try: return json.lo...
摘要由CSDN通过智能技术生成

解决方法:

最近在调用一些api时发现返回的是jsonp格式的数据,这些数据的格式基本是这样:

callback&&callback(json_data)

因为json数据中没有括号,所以我们可以使用正则表达式json_data提取出来。

代码:

import re
def loads_jsonp(_jsonp):
    try:
        return json.loads(re.match(".*?({.*}).*",_jsonp,re.S).group(1))
    except:
        raise ValueError('Invalid Input')

例子:

这是我调腾讯地图api得到的返回数据:

text = r'qq.maps._svcb3.search_service_0 && qq.maps._svcb3.search_service_0(\n{\n    "info":\n\t{\n        "type":  9,\n\t    "error": 0,\n\t"request_id": "042091151007625e22d6786216b5c537f3a4a7dd4ae2",\n        "time":  0,\n\t\t"query":  "兰州",\n\t\t"what_query": "null",\n        "hint": 0,\n        "querytype":0,\n\t\t"qcnum": 0,\n\t\t"qctype": -1\n    },\n\t"detail":\n\t{\n\t\t"city":\n\t\t{\n\t\t\t"ccode": 2947,\n\t\t\t"acode": "620100",\n\t\t\t"cname": "兰州市",\n\t\t\t"ctype": 2, \n\t\t\t"level": 11,\n\t\t\t"pointx": "103.834170",\n\t\t\t"pointy": "36.061380",\n\t\t\t"geotype": 0,\n\t\t\t"bus": 1,\n\t\t\t"path": [{"acode":620100,"ccode":2947,"cname":"兰州市"},{"acode":620000,"ccode":2946,"cname":"甘肃省"},{"acode":0,"ccode":1,"cname":"中国"}]\n\t\t},\n         \n\t\t"area":\n\t\t{\n\t\t\t"acode": 620100,\n\t\t\t"ccode": 2947,\n\t\t\t"cname": "兰州市",\n            "ctype": 2,\n            "level": 11,\n            "pointx": "103.834170",\n            "pointy": "36.061380"\n\t\t},\n\t\t"sample": {"bus":{"dest":{"pointx":"103.872911","uid":"61ec5a109ef709bdd8c4fc26","pointy":"36.046134","poitype":1,"query":"华邦女子广场"},"start":{"pointx":"103.816301","uid":"290c3540fe8cad6988fad427","pointy":"36.065754","poitype":1,"query":"白塔山公园"}},"drive":{"dest":{"pointx":"103.872911","uid":"61ec5a109ef709bdd8c4fc26","pointy":"36.046134","poitype":1,"query":"华邦女子广场"},"start":{"pointx":"103.816301","uid":"290c3540fe8cad6988fad427","pointy":"36.065754","poitype":1,"query":"白塔山公园"}}},\n\t\t"hints": [],\n        "weather": "",\n\t\t"brief":{"area":"","link":"http://baike.soso.com/v136313.htm","content":"兰州市位于黄河上游水能富集区,河川径流地表水资源总量384亿立方米,地下水总量9.6亿立方米。以兰州为中心的黄河上游干流段可建25座大中型水电站,总装机容量可达1500万千瓦,现已建成的刘家峡、八盘峡、盐锅峡、大峡水电站与邻近地区的其它水电站构成我国最大的水力发电中心之一。","title":"兰州市"},"pictures":["http://pic.baike.soso.com/p/20090709/20090709113818-619897644.jpg"],"children":[{"ccode":"620102","cname":"城关区"},{"ccode":"620103","cname":"七里河区"},{"ccode":"620104","cname":"西固区"},{"ccode":"620105","cname":"安宁区"},{"ccode":"620111","cname":"红古区"},{"ccode
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值