{ "cells": [ { "cell_type": "markdown", "id": "5f4f41a4", "metadata": {}, "source": [ "# 模块json:处理JSON数据" ] }, { "cell_type": "markdown", "id": "d242ce20", "metadata": {}, "source": [ "[JSON (JavaScript Object Notation)](https://www.json.org/json-zh.html)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。" ] }, { "cell_type": "markdown", "id": "b54ba7b6", "metadata": {}, "source": [ "## JSON 基础\n", "\n", "JSON 的基础结构有两种:键值对 (name/value pairs) 和数组 (array)。\n", "\n", "JSON 具有以下形式:\n", "\n", "- object - 对象,用花括号表示,形式为(数据是无序的):\n", " - { pair_1, pair_2, ..., pair_n }\n", "- pair - 键值对,形式为:\n", " - string : value\n", "- array - 数组,用中括号表示,形式为(数据是有序的):\n", " - [value_1, value_2, ..., value_n ]\n", "- value - 值,可以是\n", " - string 字符串\n", " - number 数字\n", " - object 对象\n", " - array 数组\n", " - true / false / null 特殊值\n", " - string 字符串\n", " \n", "例子:\n", "```json\n", "{\n", " \"name\": \"echo\",\n", " \"age\": 24,\n", " \"coding skills\": [\"python\", \"matlab\", \"java\", \"c\", \"c++\", \"ruby\", \"scala\"],\n", " \"ages for school\": { \n", " \"primary school\": 6,\n", " \"middle school\": 9,\n", " \"high school\": 15,\n", " \"university\": 18\n", " },\n", " \"hobby\": [\"sports\", \"reading\"],\n", " \"married\": false\n", "}\n", "```" ] }, { "cell_type": "markdown", "id": "93548a76", "metadata": {}, "source": [ "## JSON 与 Python 的转换\n", "\n", "将上面的结构放入字符串:" ] }, { "cell_type": "code", "execution_count": 1, "id": "2898b6f4", "metadata": {}, "outputs": [], "source": [ "info_string = \"\"\"\n", "{\n", " \"name\": \"echo\",\n", " \"age\": 24,\n", " \"coding skills\": [\"python\", \"matlab\", \"java\", \"c\", \"c++\", \"ruby\", \"scala\"],\n", " \"ages for school\": { \n", " \"primary school\": 6,\n", " \"middle school\": 9,\n", " \"high school\": 15,\n", " \"university\": 18\n", " },\n", " \"hobby\": [\"sports\", \"reading\"],\n", " \"married\": false\n", "}\n", "\"\"\"" ] }, { "cell_type": "markdown", "id": "8adeb55d", "metadata": {}, "source": [ "使用json模块读取数据:" ] }, { "cell_type": "code", "execution_count": 2, "id": "e4c003d2", "metadata": {}, "outputs": [], "source": [ "import json" ] }, { "cell_type": "code", "execution_count": 3, "id": "7f2d0a5f", "metadata": {}, "outputs": [], "source": [ "data = json.loads(info_string)" ] }, { "cell_type": "code", "execution_count": 4, "id": "3dd3e420", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'name': 'echo',\n", " 'age': 24,\n", " 'coding skills': ['python', 'matlab', 'java', 'c', 'c++', 'ruby', 'scala'],\n", " 'ages for school': {'primary school': 6,\n", " 'middle school': 9,\n", " 'high school': 15,\n", " 'university': 18},\n", " 'hobby': ['sports', 'reading'],\n", " 'married': False}" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data" ] }, { "cell_type": "markdown", "id": "6b7c5790", "metadata": {}, "source": [ "将这个对象转换为JSON字符串:" ] }, { "cell_type": "code", "execution_count": 5, "id": "d26f98ab", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\"\\n{\\n \\\"name\\\": \\\"echo\\\",\\n \\\"age\\\": 24,\\n \\\"coding skills\\\": [\\\"python\\\", \\\"matlab\\\", \\\"java\\\", \\\"c\\\", \\\"c++\\\", \\\"ruby\\\", \\\"scala\\\"],\\n \\\"ages for school\\\": { \\n \\\"primary school\\\": 6,\\n \\\"middle school\\\": 9,\\n \\\"high school\\\": 15,\\n \\\"university\\\": 18\\n },\\n \\\"hobby\\\": [\\\"sports\\\", \\\"reading\\\"],\\n \\\"married\\\": false\\n}\\n\"\n" ] } ], "source": [ "print(json.dumps(info_string))" ] }, { "cell_type": "markdown", "id": "27db956b", "metadata": {}, "source": [ "## 读写JSON文件" ] }, { "cell_type": "markdown", "id": "ca493b16", "metadata": {}, "source": [ "写JSON文件:" ] }, { "cell_type": "code", "execution_count": 6, "id": "f82a0f60", "metadata": {}, "outputs": [], "source": [ "with open(\"info.json\", \"w\") as f:\n", " json.dump(data, f)" ] }, { "cell_type": "markdown", "id": "8fe47130", "metadata": {}, "source": [ "查看文件内容:" ] }, { "cell_type": "code", "execution_count": 7, "id": "0a81396d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{\"name\": \"echo\", \"age\": 24, \"coding skills\": [\"python\", \"matlab\", \"java\", \"c\", \"c++\", \"ruby\", \"scala\"], \"ages for school\": {\"primary school\": 6, \"middle school\": 9, \"high school\": 15, \"university\": 18}, \"hobby\": [\"sports\", \"reading\"], \"married\": false}\n" ] } ], "source": [ "with open(\"info.json\") as f:\n", " print(f.read())" ] }, { "cell_type": "markdown", "id": "1e6daad4", "metadata": {}, "source": [ "读JSON文件:" ] }, { "cell_type": "code", "execution_count": 8, "id": "05fec9f0", "metadata": {}, "outputs": [], "source": [ "with open(\"info.json\") as f:\n", " info = json.load(f)" ] }, { "cell_type": "code", "execution_count": 9, "id": "f8b762b1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'name': 'echo',\n", " 'age': 24,\n", " 'coding skills': ['python', 'matlab', 'java', 'c', 'c++', 'ruby', 'scala'],\n", " 'ages for school': {'primary school': 6,\n", " 'middle school': 9,\n", " 'high school': 15,\n", " 'university': 18},\n", " 'hobby': ['sports', 'reading'],\n", " 'married': False}" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "info" ] }, { "cell_type": "markdown", "id": "99779d2b", "metadata": {}, "source": [ "删除临时文件:" ] }, { "cell_type": "code", "execution_count": 10, "id": "32ffb617", "metadata": {}, "outputs": [], "source": [ "%rm info.json" ] }, { "cell_type": "code", "execution_count": null, "id": "b9fc168e", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.10" } }, "nbformat": 4, "nbformat_minor": 5 }