Skip to content

Python3 JSON与Dictionary简介

更新日期 2017-05-05
  • 2017-05-05 创建文档
  • Python3
  • PyCharm CE

JSON简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。 它是一种文本格式。它的结构主要由键值对来构成。 一个键(key)对应一个值(value)。最外围用大括号{ }包围起来。

例如

{
    "firstName": "Rust",
    "lastName": "Fisher"
}

大括号括起来的叫做对象结构

JSON里也可以放数组。用中括号[ ]括起来。叫做数组结构

{
    "desc":"这个是一个简单的例子",
    "userInfo":{
        "firstName":"Rust",
        "lastName":"Fisher"
    },
    "books":[
        "Python入门",
        "Python进阶",
        "数据分析",
        "可视化"
    ]
}

对象结构和数组结构可以同时存在,只要满足键值对的要求即可。

最外层也可以是中括号括起来的,里面存放着多个对象。

[
    {
        "firstName": "Tom",
        "lastName": "Hanks",
        "movies": ["Cast Away"]
    },
    {
        "userInfo": {
            "firstName": "Rust",
            "lastName": "Fisher"
        },
        "books": ["Python入门", "Python进阶"],
        "desc": "可以直接添加一个key-value进去"
    }
]

Python的Dictionary(字典)简介

Dictionary(以下简称为dict或字典)是一种键值对数据结构。 有点像Java里的Map和Set。

初始化一个dict可以直接用大括号。里面写上key和value。

def use_dict():
    user_info = {'firstName': 'Rust', 'lastName': 'Fisher'}
    books = ['Python入门']
    books.append('Python进阶')
    result = {'userInfo': user_info, 'books': books}
    result['desc'] = '可以直接添加一个key-value进去'
    print(result)

# 运行结果
# {'userInfo': {'firstName': 'Rust', 'lastName': 'Fisher'}, 'books': ['Python入门', 'Python进阶'], 'desc': '可以直接添加一个key-value进去'}
可以看到,dict和JSON有些类似。都是键值对,都有数组结构。 从Python语法上来看,dict操作起来也比较简单。找到确定的key后,可以直接赋值。

Dictionary 转为JSON

Python中的dict是一种键值对的数据结构。 JSON是一种轻量级的数据交换格式,它是一种文本格式。 它们都是以键值对为基础。那么它们应该能相互转换。

将dict转为JSON,这里利用json包里提供的dumps方法。

dumps方法将传入的dict转换成JSON格式的文本。

引入json

import json

我们写出了第一个dict转JSON的方法

def to_json1(input_dict):
    print('input:', input_dict)
    jsonTxt = json.dumps(input_dict)
    print(jsonTxt)

输出:

input: {'userInfo': {'firstName': 'Rust', 'lastName': 'Fisher'}, 'books': ['Python入门', 'Python进阶'], 'desc': '可以直接添加一个key-value进去'}
{"userInfo": {"firstName": "Rust", "lastName": "Fisher"}, "books": ["Python\u5165\u95e8", "Python\u8fdb\u9636"], "desc": "\u53ef\u4ee5\u76f4\u63a5\u6dfb\u52a0\u4e00\u4e2akey-value\u8fdb\u53bb"}

中文字符都变成了字母和数字符号。这有点出乎我们意料。

涉及到中文字符的时候,需要dumps方法里指定ensure_ascii=False

def to_json2(input_dict):
    print('input:', input_dict)
    jsonTxt = json.dumps(input_dict, ensure_ascii=False)
    print(jsonTxt)
输出:
input: {'userInfo': {'firstName': 'Rust', 'lastName': 'Fisher'}, 'books': ['Python入门', 'Python进阶'], 'desc': '可以直接添加一个key-value进去'}
{"userInfo": {"firstName": "Rust", "lastName": "Fisher"}, "books": ["Python入门", "Python进阶"], "desc": "可以直接添加一个key-value进去"}
这样中文字符就ok了。

list转为JSON

list中存储着多个dict。可以直接把list转为JSON。

接上面的代码

def list_json_demo():
    tom_hanks = {'firstName': 'Tom', 'lastName': 'Hanks', 'movies': ['Cast Away']}
    info = use_dict()
    list = [tom_hanks, info]
    jsonTxt = json.dumps(list, ensure_ascii=False)
    print(jsonTxt)
    return jsonTxt

输出的JSON部分:

[{"firstName": "Tom", "lastName": "Hanks", "movies": ["Cast Away"]}, {"userInfo": {"firstName": "Rust", "lastName": "Fisher"}, "books": ["Python入门", "Python进阶"], "desc": "可以直接添加一个key-value进去"}]

读取JSON文本

json.loads方法将输入的JSON文本转为对象。

def json_to_dict1(jsonTxt):
    obj1 = json.loads(jsonTxt)
    print(obj1)
得到的对象可能是数组或者是dict。

读取JSON文件

先打开文件,用json.load方法,读取JSON内容

with open(json_file_path) as json_file:
    json_content = json.load(json_file) # 读取出来的是dict
    # ...

作者: rustfisher.com | rf.cs@foxmail.com
示例: AndroidTutorial Gitee, Tutorial Github
本文链接: https://www.an.rustfisher.com/python/basic/dictionary-JSON-file/
一家之言,仅当抛砖引玉。如有错漏,还请指出。如果喜欢本站的内容,还请支持作者。也可点击1次下方的链接(链接内容与本站无关),谢谢支持服务器