解析Json数据的几种方法

本文介绍了在Python中解析不规则Json数据的方法,包括内置的json模块、Demjson模块和jsonlike模块。当遇到包含单引号、不规则格式的Json数据时,内置json模块无法处理,而Demjson和jsonlike则能较好地解决这类问题。文章通过示例代码展示了如何使用这三个模块,并讨论了它们在处理效率和适用性上的差异。
摘要由CSDN通过智能技术生成
Json解析

印象中,json都长得很乖巧,一个属性对应一个值,key-value,某天你的leader让你去爬数据,你爬到了这样的数据:

var hei ha {‘error’: 0, ‘errorMsg’: ‘SUCCESS’, uptime: ‘20180105121318000’, ‘preClose’: 33.459999084473, tick: [{‘date’: ‘20180105’, ‘time’: 113002000, ‘price’: 33.990001678467, ‘volume’: 37100, ‘bsflag’: “B”, “ccl”: 0}…]};

既有单引号又有双引号,且单引号在属性和值之间交叉,怎么搞?replace?sub?再一看一个词包含另一个词,如,uptime与time,error与errorMsg,再替换?还有很多呢?心态要崩。。。。
这就崩了?实际的爬虫中很多大网站都是这样的json串,如,百度,新浪等。
不怕,总会有人帮我们写好工具的[奸诈笑],只需import就好了,实在满足不了个性化需求就改改源码。。。

  1. 以下将介绍解析json的四个库;
  2. 完整示例代码:完整示例下载
  3. 环境:
    • OS:win10;
    • Python:3.6;
一、内置json模块
♣   内置json的简介
  • 如果你是用Anaconda环境,会自带json模块。
  • 自带的json模块对json数据的格式要求比较严格,要求:
    • 必须出入str字段;
    • 属性必须使用双引号""括起来,如,{["key": value, "a": b]}
♣   json模块的使用

示例1.1
使用标准数据格式。

import json
str1 = 'jQuery180({"errorNo": 0, "errorMsg": "SUCCESS", "latestTimelineStamp": "20180105121318000", "preClose": 33.459999084473, "tick": [{"date": 20180105, "time": 113002000, "price": 33.990001678467, "volume": 37100, "bsflag": "B", "ccl": 0}]});'
# 去除两边的无用数据
json_str1 = str1.strip("jQuery180();")
# 解析json字符串
json_data1 = json.loads(json_str1)
print("解析后的json数据:\n", json_data1)
print("取json数据:\n", json_data1['tick'])

运行结果:

解析后的json数据:
 {'errorNo': 0, 'errorMsg': 'SUCCESS', 'latestTimelineStamp': '20180105121318000', 'preClose': 33.459999084473, 'tick': [{'date': 20180105, 'time': 113002000, 'price': 33.990001678467, 'volume': 37100, 'bsflag': 'B', 'ccl': 0}]}
取json数据:
 [{'date': 20180105, 'time': 113002000, 'price': 33.990001678467, 'volume': 37100, 'bsflag': 'B', 'ccl': 0}]

示例1.2
当数据中出现单引号时。

import json
str1 = "{'errorNo': 0, 'errorMsg': 'SUCCESS', 'latestTimelineStamp': '20180105121318000', 'preClose': 33.459999084473, 'tick': [{'date': 20180105}]}"
# 解析json字符串
json_data1 = json.loads(str1)
print("解析后的json数据:\n", json_data1)
print("取json数据:\n",
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值