json 模块:处理 JSON 数据

本文介绍了JSON的基本结构和形式,包括对象和数组,以及它们的值类型。通过示例展示了如何在Python中使用json库进行JSON字符串与Python对象之间的转换,并演示了读写JSON文件的操作。此外,还强调了JSON在数据交换中的轻量级特性和易读性。
摘要由CSDN通过智能技术生成

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。

JSON 基础

JSON 的基础结构有两种:键值对 (name/value pairs) 和数组 (array)。

JSON 具有以下形式:

  • object - 对象,用花括号表示,形式为(数据是无序的):
    • { pair_1, pair_2, ..., pair_n }
  • pair - 键值对,形式为:
    • string : value
  • array - 数组,用中括号表示,形式为(数据是有序的):
    • [value_1, value_2, ..., value_n ]
  • value - 值,可以是
    • string 字符串
    • number 数字
    • object 对象
    • array 数组
    • true / false / null 特殊值
  • string 字符串

例子:

{
    "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
}

JSON 与 Python 的转换

假设我们已经将上面这个 JSON 对象写入了一个字符串:

import json
from pprint import pprint

info_string = """
{
 "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
}
"""

我们可以用 json.loads() (load string) 方法从字符串中读取 JSON 数据:

info = json.loads(info_string)

pprint(info)
{u'age': 24,
 u'ages for school': {u'high school': 15,
                      u'middle school': 9,
                      u'primary school': 6,
                      u'university': 18},
 u'coding skills': [u'python',
                    u'matlab',
                    u'java',
                    u'c',
                    u'c++',
                    u'ruby',
                    u'scala'],
 u'hobby': [u'sports', u'reading'],
 u'married': False,
 u'name': u'echo'}、

此时,我们将原来的 JSON 数据变成了一个 Python 对象,在我们的例子中这个对象是个字典(也可能是别的类型,比如列表):

type(info)
dict

可以使用 json.dumps() 将一个 Python 对象变成 JSON 对象:

info_json = json.dumps(info)

print info_json
{"name": "echo", "age": 24, "married": false, "ages for school": {"middle school": 9, "university": 18, "high school": 15, "primary school": 6}, "coding skills": ["python", "matlab", "java", "c", "c++", "ruby", "scala"], "hobby": ["sports", "reading"]}

从中我们可以看到,生成的 JSON 字符串中,数组的元素顺序是不变的(始终是 ["python", "matlab", "java", "c", "c++", "ruby", "scala"]),而对象的元素顺序是不确定的。

生成和读取 JSON 文件

与 pickle 类似,我们可以直接从文件中读取 JSON 数据,也可以将对象保存为 JSON 格式。

  • json.dump(obj, file) 将对象保存为 JSON 格式的文件
  • json.load(file) 从 JSON 文件中读取数据
with open("info.json", "w") as f:
    json.dump(info, f)

可以查看 info.json 的内容:

with open("info.json") as f:
    print f.read()
{"name": "echo", "age": 24, "married": false, "ages for school": {"middle school": 9, "university": 18, "high school": 15, "primary school": 6}, "coding skills": ["python", "matlab", "java", "c", "c++", "ruby", "scala"], "hobby": ["sports", "reading"]}

从文件中读取数据:

with open("info.json") as f:
    info_from_file = json.load(f)

pprint(info_from_file)
{u'age': 24,
 u'ages for school': {u'high school': 15,
                      u'middle school': 9,
                      u'primary school': 6,
                      u'university': 18},
 u'coding skills': [u'python',
                    u'matlab',
                    u'java',
                    u'c',
                    u'c++',
                    u'ruby',
                    u'scala'],
 u'hobby': [u'sports', u'reading'],
 u'married': False,
 u'name': u'echo'}

删除生成的文件:

import os
os.remove("info.json")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sonhhxg_柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值