运营的Python指南 - Dictionary与JSON

举报
AnRFDev 发表于 2021/06/11 10:58:21 2021/06/11
【摘要】 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它是一种文本格式。它的结构主要由键值对来构成。一个键(key)对应一个值(value)。最外围用大括号{ }包围起来。

JSON与Dictionary简介

  • 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。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。