解析Json数据的几种方法

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&

你可能感兴趣的:(Python,机器学习,解析json,爬虫数据,爬虫,python)