解析JSON


本页用到的JSON数据

JSON(点击展开)
{
    "school": {
        "students": [
            {
                "name": "小明",
                "age": 12,
                "sex": "male"
            },
            {
                "name": "小红",
                "age": 13,
                "sex": "female"
            },
            {
                "name": "小强",
                "age": 14,
                "sex": "male"
            }
        ],
        "school_name": "光明中学",
        "manager": "大强",
        "age": 100
    }
}

JSON 与 XML 的区别

建议您先看完整个 XML 教程再来看 JSON,因为方法都是通用的。

JSON 中的 键名 对应 XML 中的 标签名

JSON 中没有属性的概念,也没有注释、CDATA的概念,所以与这些相关的所有方法均不能使用,操作符也是。

可以使用的查询方法有:find_nodes_by_tagfind_nodes_by_textfind_nodes_with_sibling_ancestorfind_nodes_with_ancestorfind_nodes_with_descendants

可以调用的保存方法有:save_as_xml。(save_as_json未经过测试,可用但可能不稳定)

其它的增删改方法也可以使用,但如果不是必须要用 Universal Parser 读写 JSON 的话,不建议使用,因为我还没有完成相关的测试。

可以使用的操作符有:|/&

快速解析代码示例

import UniversalParser as UP
manager = UP.parse_json(json_data, analysis_text=False)

# 获取所有学生的年龄
students_age = manager | 'students' | 'age'
print([_age & UP.SM.text for _age in students_age]) # [12, 13, 14]

# 获取学校的年龄
print(manager.document.school.age) # 100

# 遍历所有的学生
for stu in manager | 'students':
    print(stu.name, stu.age, stu.sex)

''' output:

小明 12 male
小红 13 female
小强 14 male
'''

manager.save_as_xml() # 保存为 XML
看似随意的取值,其实非常可靠,并且具备了很强的扩展性。因为节点间的联系变成了 Universal Parser 内部的操作,外部只需要关注自己所需要的即可。

JSON转XML

import UniversalParser as UP

'''json_data 是一个JSON字符串
'''
manager = UP.parse_json(json_data, analysis_text=False)

manager.save_as_xml() # JSON 保存为 XML