zoukankan      html  css  js  c++  java
  • Python3编写网络爬虫09-数据存储方式二-JSON文件存储

    2.JSON文件存储

    全称为JavaScript Object Notation 通过对象和数组的组合来表示数据,构造简洁且结构化程度非常高。
    是一种轻量级的数据交换格式

    2.1 对象和数组

    在JavaScript中 一切皆对象。 因此任何类型都可以通过json来表示,如 字符串,数字,对象,数组等

    对象 : 在JavaScript中使用{}括起来 数据结构为{key1:value,key2:value2...}的键值对结构
    在面向对象中 key为对象的属性,value为对应的值,键名可以使用整数和字符串表示,值的类型可以是任意类型。
    数组 : 数组在JavaScript中使用方括号[] 括起来 数据结构为["java","JavaScript","Python"...]索引结构。
    在JavaScript中数组是一种比较特殊的数据类型,可以像对象那样使用键值对,更多的是索引,值可以是任意类型。

    示例:

    [{
    "name" : "Bod",
    "gender" : "male",
    "birrhday" : "1992-10-19"
    },{
    "name" : "Selina",
    "gender" : "female",
    "birthday" : "1995-10-18"
    }]

    JSON 可以是以上两种形式自由组合,无限次嵌套,结构清晰,数据交换的极佳方式。

    2.2 读取JSON

    Python为我们提供了简易的JSON库实现JSON文件的读写操作。
    可以调用 loads()方法将JSON文本字符串转为JSON对象,
    dumps() 方法将JSON对象转为文本字符串

    示例:

    import json
    str1 = '''
    [{
    "name" : "Bod",
    "gender" : "male",
    "birrhday" : "1992-10-19"
    },{
    "name" : "Selina",
    "gender" : "female",
    "birthday" : "1995-10-18"
    }]
    '''
    print(type(str1))#str
    data = json.loads(str1)
    print(data)
    print(type(data))#list


    通过索引来获取对应的内容 例如 第一个元素的name属性

    print(data[0]['name'])
    print(data[0].get('name'))

    推荐第二种方式 get()方法 如果键名不存在 不会报错 返回None 另外可以传入第二个参数 默认值

    print(data[0].get('age'))
    print(data[0].get('age',20))

    注意: JSON的数据需要用双引号括起来 不能使用单引号

    示例:

    import json
    str1 = '''
    [{
    'name' : 'Bod',
    'gender' : 'male',
    'birrhday' : '1992-10-19'
    },{
    'name' : 'Selina',
    'gender' : 'female',
    'birthday' : '1995-10-18'
    }]
    '''
    
    data = json.loads('str1')

    报错 解析错误

    如何读取文本文件json内容

    import json
    
    with open('data.json','r') as file:
    str1 = file.read()
    data = json.loads(str1)
    print(data)


    2.3 输出JSON

    调用 dumps() 将JSON对象转化为字符串

    示例:

    import json
    
    data = [{
    "name" : "Bod",
    "gender" : "male",
    "birrhday" : "1992-10-19"
    }]
    with open('data.json','w') as file:
    file.write(json.dumps(data,indent=2))#indent 缩进字符个数


    如果JSON包含中文字符

    示例:

    import json
    
    data = [{
    "name" : "小米",
    "gender" : "",
    "birrhday" : "1992-10-19"
    }]
    with open('data.json','w') as file:
    file.write(json.dumps(data,indent=2))#indent 缩进字符个数

    结果中文字符 变成了Unicode字符 需要指定参数 ensure_ascii=False

    示例:

    import json
    
    data = [{
    "name" : "小米",
    "gender" : "",
    "birrhday" : "1992-10-19"
    }]
    with open('data.json','w') as file:
    file.write(json.dumps(data,indent=2,ensure_ascii=False))#indent 缩进字符个数

    后面做数据分析时会经常用到 需熟练掌握

  • 相关阅读:
    Java学习笔记21---内部类之对成员内部类的补充说明(二)(修正)
    Java学习笔记20---内部类之对成员内部类的补充说明(一)
    Java学习笔记19---内部类之简介成员内部类、局部内部类及匿名内部类
    Java学习笔记18---final关键字修饰变量、方法及类
    Java学习笔记17---成员方法的重载与重写
    Java学习笔记16---抽象类与接口的浅显理解
    Java学习笔记15---instanceof与向下转型
    把大端、小端与堆、栈的生长方向联系起来记忆
    2020综合实践—第7次实践作业 03组
    2020综合实践 第6次实践作业 03组
  • 原文地址:https://www.cnblogs.com/liuxiaosong/p/10337119.html
Copyright © 2011-2022 走看看