python中如何将一个JSON文档映射为Python对象

目录
  • 一、将一个JSON文档映射为Python对象
    • 第一种方法
    • 第二种方法
  • 二、总结

前言:

文章主要包括一下三个部分:

  • 考点:loads函数的用法。
  • 面试题:如何将一个JSON文档映射为Python对象?
  • 解析

一、将一个JSON文档映射为Python对象

第一种方法

供我们读取的JSON文件是test.json,文件内容如下:

{
  "name": "孤寒者",
  "age": 18,
  "height": 130
}

首先,我们可以通过json模块的loads()方法将JSON文档转为Python字典类型:

# coding=utf-8
import json

with open('test.json', 'r', encoding='utf-8') as f:
    jsonStr = f.read()

    product = json.loads(jsonStr)
    print(type(product))
    print(product['name'])

我们在loads()方法里使用对象钩子即可实现将一个JSON文档映射为Python对象。分析思路:

  • 我们使用对象钩子实质上总共做了两步:先通过loads()方法将JSON文档转换为dict对象,然后将这个dict对象同时创建Product对象->将dict对象作为参数传入Product对象的构造方法__init__()方法中的第二个参数,即d。而这个d其实就是包含了这个JSON文档的字典对象,我们又在__init__()方法中将d赋值给了__dict__(就相当于你一个个写类里面的属性名=属性值),这就会将字典里的key和value映射为Product对象里的属性和属性值。
# coding=utf-8
import json
class Product:
    def __init__(self, d):
        self.__dict__ = d
with open('test.json', 'r', encoding='utf-8') as f:
    jsonStr = f.read()
    product = json.loads(jsonStr, object_hook=Product)
    print(type(product))
    # print(product['name'])        # 这样就不行了~
    print(product.name)

第二种方法

也是使用了对象钩子,不过与第一种方法不同的是,此时对象钩子指定的不再是类,而是指定一个转换函数,通过这个函数返回对象。

# coding=utf-8
import json

class Product:
    def __init__(self, d):
        self.__dict__ = d
with open('test.json', 'r', encoding='utf-8') as f:
    jsonStr = f.read()
    def json2Product(d):
        return Product(d)
    product1 = json.loads(jsonStr, object_hook=json2Product)

    print(type(product1))
    print(product1.name)

二、总结

json模块的loads函数可以装载JSON文档,并将其转换为JSON对象。关键需要通过object_hook参数指定钩子对象,然后在类的构造方法中将传入的JSON对象赋给内部变量__init__

到此这篇关于python中如何将一个JSON文档映射为Python对象的文章就介绍到这了,更多相关JSON映射内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 关于python处理大型json文件的方法

    如图所示,要处理的数据是一个json数组,而且非常大 下图为电脑配置,使用 json.load() 方法加载上述json文件电脑直接卡死 解决思路: 先用python进行预处理,即一整个json数据加载慢,那就分开加载,每次加载一个json对象,然后使用 json.dumps()方法 存储到txt中,方便读取.当然也可以存储到内存中,根据情况而定. 算法思想:因为 json 是一种结构化的数据,所以 {} 是成对存在的.因为使用逐行读取的方法读入json文件,所以根据 {} 的数量来判断是否读取

  • python 列表套json字典根据相同的key筛选数据

    前言: 工作中遇到以下小问题,解决方法如下,可能比较暴力,暂时留档,再进行优化. 要求:将列表中json的 ‘id’ 字段值相同的数据,根据 type的值,按照一定的优先级次序排列,列表中仅保留优先级最高的type. 测试用例: list1 示例数据: type优先级列表:[6, 4, 2, 5, 8, 3, 7, 1] (依次递减,6优先级最高,1优先级最低) draw_data  = [         {'geometry':{"coordinates":[121.8763583

  • python向json中追加数据的两种方法总结

    目录 前言 1. list dump (不推荐) 2. json update (推荐使用) 总结 前言 json以其轻量级的数据交换格式,且易于阅读和编写而使用率很广泛,而使用json的过程中时而需要增加字段,本人验证两种方式之后将其集成梳理. 具体操作详情如下: 1. list dump (不推荐) 采用list方式,向json中添加字段.此法存在一定的问题,不推荐使用. 方法如下: (1)先创建一个列表: json_content = [] (2)将当前json文件中已有的内容读入列表中:

  • python库JsonSchema验证JSON数据结构使用详解

    目录 简单实例 type关键字 object关键字 属性 properties 必需属性 大小 数组属性 items List validation Tuple validation 长度 唯一性 通用关键字 元数据 枚举值 组合模式 anyOf oneOf allOf $schema关键字 正则表达式 构建复杂的模式 重用 JSON Schema是一个用于验证JSON数据结构的强大工具, 我查看并学习了JSON Schema的官方文档, 做了详细的记录, 分享一下. 我们可以使用JSON Sc

  • Python利用jmespath模块进行json数据处理

    jmespath是python的第三方模块,是需要额外安装的.它在python原有的json数据处理上 做出了很大的贡献,至于效果接下来试试就知道了有多方便. 话不多说,我们直接进入正题… 既然是第三方的库,那肯定是要安装的.通过pip的方式先将jmespath库安装好… pip install jmespath 将安装好的模块导入到代码块中… import jmespath as jp jmespath中有一个很重要.很方便的函数那就是search,不管你的json数据有多么变态,它都能给你找

  • Python读写JSON文件的操作详解

    目录 JSON JSON 起源 JSON 样例 Python 原生支持 JSON 序列化 JSON 简单的序列化示例 JSON 反序列化 简单的反序列化示例 应用案例 编码和解码 JSON JSON 起源 JSON 全称 JavaScript Object Notation .是处理对象文字语法的 JavaScript 编程语言的一个子集.JSON 早已成为与语言无关的语言,并作为自己的标准存在. JSON 样例 { "data":[ { "id": "1

  • python中如何将一个JSON文档映射为Python对象

    目录 一.将一个JSON文档映射为Python对象 第一种方法 第二种方法 二.总结 前言: 文章主要包括一下三个部分: 考点:loads函数的用法. 面试题:如何将一个JSON文档映射为Python对象? 解析 一.将一个JSON文档映射为Python对象 第一种方法 供我们读取的JSON文件是test.json,文件内容如下: { "name": "孤寒者", "age": 18, "height": 130 } 首先,我

  • SQLServer中JSON文档型数据的查询问题解决

    近日在项目中遇到一个问题: 如何在报表中统计JSON格式存储的数据? 例如有个调查问卷记录表,记录每个问题的答案. 其结构示意如下(横表设计) Id user date Q1_Answer Q2_Answer Q3_Answer 行Id 答题用户 答题日期 问题一结果 问题二结果 问题三结果 在[Q1_Answer].[Q2_Answer].[Q3_Answer]中记录的数据格式是JSON文档内容,因为是选项值,而且考虑到可能有多选, 所以存储的格式如下: 1 [ {"code":&q

  • 教你如何利用Python批量翻译英文Word文档并保留格式

    一.需求描述 手上有大量外文文档(本案例以5份为例,分别命名为 test1.docx test2.docx 以此类推),其中一份如下: 基本需求:「批量将这些文档的内容全部翻译成中文,并转存到新的文件中」,效果如下: 高级需求:基本需求满足的同时,要求 「保留原文档的格式」,效果如下: 二.逻辑梳理 2.1 翻译 API 本需求的核心是翻译,策略是利用网络的翻译 API,这里推荐百度翻译开放平台,不考虑并发数的话可以用标准版,免费使用不限字符量! " 百度翻译开放平台:http://api.fa

  • Python中高效的json对比库deepdiff详解

    目录 deepdiff是什么 deepdiff安装 案例1.对比txt文件 案例2.对比json 工作中我们经常要两段代码的区别,或者需要查看接口返回的字段与预期是否一致,如何快速定位出两者的差异?除了一些对比的工具比如Beyond Compare.WinMerge等,或者命令工具diff(在linux环境下使用),其实Python中也提供了很多实现对比的库,比如deepdiff和difflib,这两个的区别是deepdiff显示的对比效果比较简洁,但是可以设置忽略的字段,difflib显示的对

  • eclipse中自动生成javadoc文档的方法

    本文实例讲述了eclipse中自动生成javadoc文档的方法.分享给大家供大家参考.具体方法如下: 使用eclipse生成文档(javadoc)主要有三种方法: 1. 在项目列表中按右键,选择Export(导出),然后在Export(导出)对话框中选择java下的javadoc,提交到下一步. 在Javadoc Generation对话框中有两个地方要注意的: javadoc command:应该选择jdk的bin/javadoc.exe destination:为生成文档的保存路径,可自由选

  • Python使用pyh生成HTML文档的方法示例

    最近在项目中需要将结果导出到HTML中,在网上搜索的时候发现了这个库,通过官方的一些文档以及网上的博客发现它的使用还是很简单的,因此选择在项目中使用它. 在使用的时候发现在Python3中有些问题,网上很多地方都没有提到,因此我在这将它的使用以及我遇到的问题和解决方案整理出来供大家参考 本文主要参考 pyh中文文档 下载的样本也是该文中提到的地址 常规使用 在使用时一般先导入模块: from phy import * 然后可以创建一个PyH对象就像这样 page = PyH(title) 其中t

  • python编写暴力破解zip文档程序的实例讲解

    编写暴力破解Zip文件要从学习zipfile库的使用方法入手,首先打开Python解释器,用help('zipfile')命令来了解这个库并重点看一下ZipFile类中的extractall()这个方法 ZipFile extractall() 让我们来写一个脚本测试一下Zip文件库的用法,首先创建一个有密码的压缩文件,这里设置密码为awd,文件名为evil.zip,要解压这个zip文件,实例化一个新的ZipFile类,使用extractall()方法,在可选参数pwd上填上密码 运行后你会发现

  • python实现的生成word文档功能示例

    本文实例讲述了python实现的生成word文档功能.分享给大家供大家参考,具体如下: 每月1次的测试费用报销,需要做一个文档.干脆花点时间写个程序吧. # -*- coding: utf-8 -*- from tools import get_data from docx import Document def new_doc(fee_data,doc_path,fee):#新建一个word文档,写入汇总表的数据 document = Document() p_total = document

  • python 使用pdfminer3k 读取PDF文档的例子

    1.安装 pdfminer3k 通过pip安装: pip install pdfminer3k 下载安装:在网页 https://pypi.org/project/pdfminer3k/1.3.1/#files 进行下载,解压.然后cmd命令进入到当前文件夹: 可以直接在资源管理器的路径栏直接输入cmd进入到当前目录.然后执行 python setup.py install 等待安装完成 2.读取pdf中的TXT代码示例: from pdfminer.converter import PDFPa

  • Ubuntu下使用python读取doc和docx文档的内容方法

    读取docx文档 使用的包是python-docx 1. 安装python-docx包 sudo pip install python-docx 2. 使用python-docx包读取数据 #encoding:utf8 import docx doc = docx.Document('test.docx') docText = '\n'.join([paragraph.text for paragraph in doc.paragraphs]) #print(docText) python-do

随机推荐