Python中的JSON数据处理

JSON(JavaScript对象表示法)是一种轻量级的数据交换格式, 人类易于读写。计算机也很容易解析和生成。 JSON基于JavaScript编程语言。它是一种独立于语言的文本格式, 可以在Python, Perl等其他语言中使用。它主要用于在服务器和Web应用程序之间传输数据。 JSON建立在两种结构上:

  • 名称/值对的集合。这可以实现为对象, 记录, 字典, 哈希表, 键列表或关联数组。
  • 值的有序列表。这可以实现为数组, 向量, 列表或序列。
Python中的JSON
有一些在Python中支持JSON的软件包, 例如metamagic.json, jyson, simplejson, Yajl-Py, ultrajson和json。在本教程中, 我们将使用Python本身支持的json。我们可以使用提供JSON linter的此站点来验证我们的JSON数据。
以下是JSON数据的示例。我们注意到数据表示非常类似于Python字典。
{ "article": [{ "id":"01", "language": "JSON", "edition": "first", "author": "Derrick Mwiti" }, { "id":"02", "language": "Python", "edition": "second", "author": "Derrick Mwiti" } ], "blog":[ { "name": "srcmini", "URL":"srcmini.com" } ] }

将JSON转换为Python对象
【Python中的JSON数据处理】我们可以使用json模块中的json.loads()方法解析上述JSON字符串。结果是一个Python字典。
import json my_json_string = """{ "article": [{ "id":"01", "language": "JSON", "edition": "first", "author": "Derrick Mwiti" }, { "id":"02", "language": "Python", "edition": "second", "author": "Derrick Mwiti" } ], "blog":[ { "name": "srcmini", "URL":"srcmini.com" } ] } """ to_python = json.loads(my_json_string)

to_python['blog']

[{'URL': 'srcmini.com', 'name': 'srcmini'}]

将Python对象转换为JSON
使用json.dumps(), 我们可以将Python对象转换为JSON。
blog = {'URL': 'srcmini.com', 'name': 'srcmini'} to_json= json.dumps(blog)

to_json

'{"URL": "srcmini.com", "name": "srcmini"}'

让我们比较一下Python和JSON中的数据类型。
Python JSON
dict Object
list Array
tuple Array
str String
int Number
float Number
True true
False false
None null
下面我们将展示如何将各种Python对象转换为不同的JSON数据类型。
Python元组到JSON数组
tuple_example = 'Mango', 'Banana', 'Apple'; print(json.dumps(tuple_example));

["Mango", "Banana", "Apple"]

Python列表到JSON数组
list_example = ["Mango", 1, 3, 6, "Oranges"]; print(json.dumps(list_example));

["Mango", 1, 3, 6, "Oranges"]

Python字符串到JSON字符串
string_example = "This is a cool example." print(json.dumps(string_example))

"This is a cool example."

Python布尔值到JSON布尔值
boolean_value = http://www.srcmini.com/False print(json.dumps(boolean_value))

false

编写JSON文件
json模块还允许我们将JSON数据写入JSON文件。 JSON文件以.json扩展名保存。让我们看看下面如何做到这一点。为了实现这一点, 我们使用Python的open()函数, 将w作为参数来表示我们要写入文件。
my_json_string = """{ "article": [{ "id":"01", "language": "JSON", "edition": "first", "author": "Derrick Mwiti" }, { "id":"02", "language": "Python", "edition": "second", "author": "Derrick Mwiti" } ], "blog":[ { "name": "srcmini", "URL":"srcmini.com" } ] } """ with open('test_file.json', 'w') as file: json.dump(my_json_string, file)

读取JSON文件
现在, 让我们展示如何读取刚刚创建的JSON文件。我们使用json.load加载文件。
with open('test_file.json', 'r') as j: json_data = http://www.srcmini.com/json.load(j) print(json_data)

{ "article": [{ "id":"01", "language": "JSON", "edition": "first", "author": "Derrick Mwiti" }, { "id":"02", "language": "Python", "edition": "second", "author": "Derrick Mwiti" } ], "blog":[ { "name": "srcmini", "URL":"srcmini.com" } ] }

json.load与json.loads
加载文件时使用json.load, 而加载字符串时使用json.loads(load string)。
json.dump与json.dumps
要将JSON转储到文件中时, 请使用json.dump。当我们需要JSON数据作为解析或打印的字符串时, 将使用json.dumps(dump string)。
在数据科学中处理JSON数据
有时, 我们在数据科学活动中需要加载JSON格式的数据。熊猫提供了.read_json, 使我们能够做到这一点。加载数据后, 我们使用pandas.DataFrame属性将其转换为数据框。
import pandas as pd data = http://www.srcmini.com/pd.read_json("https://api.github.com/users") df = pd.DataFrame(data)

df

实施局限性
编码JSON的过程称为序列化, 而解码JSON的过程称为反序列化。某些JSON解串器实现可能会在以下方面设置限制:
  • 可接受的JSON文本的大小
  • JSON对象和数组的最大嵌套级别
  • JSON编号的范围和精度
  • JSON字符串的内容和最大长度
但是, 此类限制仅与Python数据类型和Python解释器本身相关。
API中的JSON
JSON的主要应用之一是在Web应用程序中构建API。这非常有用, 因为它允许其他开发人员使用支持JSON的任何语言在我们的API之上构建。大多数现代编程语言都支持JSON。我们将展示一个简单的示例, 说明如何在Python中构建Flask应用程序时如何返回JSON。 Flask提供了jsonify模块, 使我们能够实现这一目标。
from flask import jsonify@app.route('/_get_current_user') def get_current_user(): return jsonify(username=g.user.username, email=g.user.email, id=g.user.id)

这将向浏览器发送类似于以下所示的JSON响应。
{ "username": "Derrick Mwiti", "email": "myemail@gmail.com", "id": 1 }

{'email': 'myemail@gmail.com', 'id': 1, 'username': 'Derrick Mwiti'}

总结在本教程中, 我们已经对Python中的JSON进行了介绍。我们已经介绍了JSON模块提供的各种方法, 例如json.load和json.dumps。我们还看到了我们可以在数据科学项目中加载JSON数据, 以及如何在构建API时返回JSON数据。你可以通过访问Python网站的官方页面来了解有关JSON模块的更多信息。
如果你想了解有关Python的更多信息, 请参加srcmini的Python数据库入门课程。

    推荐阅读