Python中,处理JSON(JavaScript Object Notation)数据是非常常见和重要的。JSON是一种轻量级的数据交换格式,易于人类阅读和编写,也易于机器解析和生成。本文主要介绍Python中JSON使用,及使用示例代码。

1、Python中JSON

Python有一个json的内置程序包,可用于处理JSON数据。

例如:

导入json模块:

import json

2、解析JSON—从JSON转换为Python对象

如有JSON字符串,则可以使用json.loads()方法进行解析。

结果将是一个Python字典。

例如:

从JSON转换为Python:

import json

x =  '{ "name":"cjavapy", "age":3, "city":"china"}'

# 解析 x:
y = json.loads(x)

print(y["name"])

3、从Python对象转换成JSON

如有Python对象,则可以使用json.dumps()方法将其转换为JSON字符串。

例如:

从Python对象转换为JSON:

import json

# a Python object (dict):

x =  '{ "name":"cjavapy", "age":3, "city":"china"}'

# convert into JSON: y = json.dumps(x) #结果是 JSON string: print(y)

下列类型可以转换Python对象成JSON字符串:

  • dict
  • list
  • tuple
  • string
  • int
  • float
  • True
  • False
  • None

例如:

将Python对象转换为JSON字符串,并输出值:

import json

print(json.dumps({"name": "cjavapy", "age": 3}))
print(json.dumps(["python", "cjavapy"]))
print(json.dumps(("python", "cjavapy")))
print(json.dumps("hello"))
print(json.dumps(42))
print(json.dumps(31.76))
print(json.dumps(True))
print(json.dumps(False))
print(json.dumps(None))

从Python对象转换为JSON时,Python对象将转换为等效的JSON(JavaScript):

Python

JSON

dict

Object

list

Array

tuple

Array

str

String

int

Number

float

Number

True

true

False

false

None

null

例如:

转换包含所有合法数据类型的Python对象:

import json

x = {
"name": "python",
"age": 20,
"married": True,
"divorced": False,
"children": ("c","python"),
"pets": None,
"langs": [
{"model": "java", "year": 5},
{"model": "python", "year": 6}
]
}

print(json.dumps(x))

4、格式化json.dumps()生成的JSON字符串

上面的示例显示了一个JSON字符串,但是它不是很容易阅读,没有缩进和换行符。

json.dumps()方法有一些参数,以便更容易地读取结果:

例如:

使用indent参数定义缩进数量:

json.dumps(x, indent=4)

还可以定义分隔符,默认值为(", ", ": "),这意味着使用逗号和空格分隔每个对象,并使用冒号和空格分隔键和值:

例如:

使用separators参数更改默认的分隔符:

json.dumps(x, indent=4, separators=(". ", " = "))

5、对json.dumps()结果排序

json.dumps()方法有对结果中的键进行排序的参数:

例如:

使用sort_keys参数指定是否对结果进行排序:

json.dumps(x, indent=4, sort_keys=True)

6、使用第三方库:Demjson

Demjson 是 python 的第三方模块库,可用于编码和解码 JSON 数据,包含了 JSONLint 的格式化及校验功能。

Github 地址https://github.com/dmeranda/demjson

官方地址http://deron.meranda.us/python/demjson/

1)环境配置

在使用 Demjson 编码或解码 JSON 数据前,我们需要先安装 Demjson 模块。本教程我们会下载 Demjson 并安装:

tar -xvzf demjson-2.2.3.tar.gz
cd demjson-2.2.3
python setup.py install

更多安装介绍文档http://deron.meranda.us/python/demjson/install

2)JSON 函数

函数描述
encode将 Python 对象编码成 JSON 字符串
decode将已编码的 JSON 字符串解码为 Python 对象

3)encode使用

Python encode() 函数用于将 Python 对象编码成 JSON 字符串。

语法

demjson.encode(self, obj, nest_level=0)

以下实例将数组编码为 JSON 格式数据:

#!/usr/bin/python
import demjson
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
json = demjson.encode(data)
print(json)

以上代码执行结果为:

[{"a":1,"b":2,"c":3,"d":4,"e":5}]

4)decode使用

Python 可以使用 demjson.decode()函数解码 JSON 数据。该函数返回 Python 字段的数据类型。

语法

demjson.decode(self, txt)

以下实例展示了Python 如何解码 JSON 对象:

#!/usr/bin/python

import demjson
json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
text = demjson.decode(json)

print(text)

以上代码执行结果为:

{u'a':1, u'c':3, u'b':2, u'e':5, u'd':4}

7、异常处理与验证

在处理JSON数据时,可能会遇到格式错误或者缺少预期的字段等情况。可以使用 try-except 结构来捕获可能的异常,或者使用 jsonschema 等库来进行JSON数据的验证。

json_str = '{"name": "John", "age": 30, "city": "New York"'

try:
    python_obj = json.loads(json_str)
except json.JSONDecodeError as e:
    print(f"JSON decoding error: {e}")

# 使用 jsonschema 进行数据验证
from jsonschema import validate

schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "age": {"type": "number"},
        "city": {"type": "string"}
    },
    "required": ["name", "age", "city"]
}

try:
    validate(python_obj, schema)
    print("JSON data is valid.")
except Exception as e:
    print(f"JSON validation error: {e}")

推荐文档