如何使用Python处理JSON数据

本教程说明了使用Python编程语言处理JSON数据有多么容易。

在开始本主题之前,让我们简要定义JSON的含义。 让我们看看JSON的主要网站如何定义它:

JSON (JavaScript对象表示法)是一种轻量级的数据交换格式。 人类易于阅读和书写。 机器很容易解析和生成。 它基于JavaScript编程语言标准ECMA-262第三版-1999年12月)的子集。 JSON是一种完全独立于语言的文本格式,但是使用C语言家族的程序员所熟悉的约定,包括C,C ++,C#,Java,JavaScript,Perl,Python等。 这些属性使JSON成为理想的数据交换语言。

因此,JSON是在JavaScript中创建和存储数据结构的简单方法。 之所以看到JavaScript的首字母缩写词,是因为在使用JSON存储数据时会创建一个JavaScript对象。 但是,不用担心,您不需要了解JavaScript即可使用JSON文件,而是与JSON语法(格式)本身有关。

简而言之,JSON是我们存储和交换数据的一种方式,这是通过其语法实现的,并在许多Web应用程序中使用。 JSON的好处是它具有人类可读的格式,这可能是在数据传输中使用它的原因之一,此外,它在使用API时也很有效。

JSON格式的数据的示例如下:

{"name": "Frank", "age": 39,
 "isEmployed": true}

在本教程中,我将向您展示如何使用Python处理JSON文件。 所以,让我们开始吧!

Python和JSON

Python使处理JSON文件变得简单。 用于此目的的模块是json模块。 该模块应该包含(内置)在您的Python安装中,因此,您不需要像在处理PDFExcel文件时那样安装任何外部模块。 要使用此模块,您唯一需要的就是导入它:

import json

但是, json库做什么? 该库主要从文件或字符串解析JSON。 它还将JSON解析为Python中的字典或列表,反之亦然,这会将Python字典或列表转换为JSON字符串。

JSON至Python

读取JSON意味着将JSON转换为Python值(对象)。 如上所述, json库将JSON解析为Python中的字典或列表。 为此,我们使用loads()函数(从字符串加载),如下所示:

import json
jsonData = '{"name": "Frank", "age": 39}'
jsonToPython = json.loads(jsonData)

如果要查看输出,请执行print jsonToPython ,在这种情况下,您将获得以下输出:

{u'age': 39, u'name': u'Frank'}

也就是说,数据以Python字典(JSON对象数据结构)的形式返回。 那么,语句print jsonToPython['name']返回任何输出? 继续尝试一下。

Python到JSON

在上一节中,我们看到了如何将JSON转换为Python值(即Dictionary)。 在本节中,我将向您展示如何将Python值转换(编码)为JSON。

假设我们在Python中具有以下Dictionary:

import json
pythonDictionary = {'name':'Bob', 'age':44, 'isEmployed':True}
dictionaryToJson = json.dumps(pythonDictionary)

如果print dictionaryToJson ,则将获得以下JSON数据:

{"age": 44, "isEmployed": true, "name": "Bob"}

因此,此输出被视为对象(字典)的数据表示。 方法dumps()是执行此操作的关键。

重要的是,JSON不能存储所有类型的Python对象,而只能存储以下类型: 字典; 布尔值; 数字; 字符串; 和没有。 因此,需要转换任何其他类型才能存储在JSON中。

假设我们有以下课程

class Employee(object):
    def __init__(self, name):
        self.name = name

假设我们创建了一个新的对象abder ,如下所示:

abder = Employee('Abder')

如果我们想将此对象转换为JSON怎么办? 那是json.dumps(abder)吗? 在这种情况下,您将收到类似于以下内容的错误:

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    abderJson = json.dumps(abder)
  File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 243, in dumps
    return _default_encoder.encode(obj)
  File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 207, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 270, in iterencode
    return _iterencode(o, 0)
  File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 184, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <__main__.Employee object at 0x10e74b750> is not JSON serializable

但是,有解决方法吗? 幸运的是。 我喜欢Python Tips网站上描述的解决方法。 为了解决此问题,我们可以定义类似于以下内容的方法:

def jsonDefault(object):
    return object.__dict__

然后将对象编码为JSON,如下所示:

jsonAbder = json.dumps(abder, default=jsonDefault)

如果print jsonAbder ,应该得到以下输出:

{"name": "Abder"}

现在,我们已经将Python对象( abder )编码为JSON。

结论

从本教程中,我们可以一次又一次地注意到Python不仅证明了它可以与不同的应用程序一起工作的能力,而且还证明了它在与应用程序一起工作时可以灵活地处理不同问题,如我们在本教程的最后一部分中所看到的。

如果您想进一步了解json模块,可以访问文档页面

我们已经建立了完整的指南,可以帮助您学习JavaScript ,无论您是刚开始作为Web开发人员还是想探索更高级的主题。

无论您是刚刚起步还是想学习新技能的经验丰富的程序员,都可以通过我们完整的python教程指南学习Python。

翻译自: https://code.tutsplus.com/tutorials/how-to-work-with-json-data-using-python--cms-25758

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值