Python实现字典 dict 和 json 相互转化

[] 与  {}

 [] 是 Array(也就是数组)   {} 是Ojbect(也就是对象)

[] Array 的key 是 int.
{} 的key 是 string

 

例如 var dot1=["a"]; 就是一个数组

      var dot2={"a"} 就是一个对象

数组和对象转换非常简单, dot1把[] 替换为{} 就是对象, dot2把[]替换为{}就是素组。这在jquery的JSON处理中,非常常用。

当dot1为素组后,自然支持数组的常用方法,例如 dot1.push(), dot1.shift(),dot1.pop() 等方法

dot2为对象可以使用JS对象的各种方法。

 

var dot2={a:"a",b:"b",c:"c"}; 不管你看到dot2定义多么复杂,只要看到他是以{}开始和结尾就是理解为对象。

var dot1=["a","b","c"]; 不管dot1多简单,只要是[]包含,就是数组

 

当然,一个数组是可以包含多个对象的,所以 var dot1=[{a:"a"},{b:"b"}]; dot1就包含了2个对象

同样,dot1={[{a:"a"},{b:"b"}]} 就是一个对象,只是这个对象包含了一个数组。

var a= Array();
a[a.length] = '3';
a[a.length] = '4';
a[a.length] = '5';

a toJSON 后 ='["3", "4", "5"]'

var a = new Object();

a['test1'] = '3';
a['test2'] = '4';
a['test3'] = '5';

a toJSON 后 = '{"test1":"3", "test2":"4", "test3":"5"}'

1
、简单的格式嵌套 { "tr_info": { " description": "交易信息", "type": " string", "tr_type": { " description": "交易类型", "type": " string" } } } 2、数组对象嵌套的格式 { "tr_info": { " description": "交易信息", "type": " string", "tr_type": [{ " description": "交易类型1", "type": " string" }, { " description": "交易类型2", "type": " string" }] } }
1、简单的格式嵌套

{
    "tr_info": {
        " description": "交易信息",
        "type": " string",
        "tr_type": {
            " description": "交易类型",
            "type": " string"
        }
    }
}
2、数组对象嵌套的格式

{
    "tr_info": {
        " description": "交易信息",
        "type": " string",
        "tr_type": [{
            " description": "交易类型1",
            "type": " string"
        }, {
            " description": "交易类型2",
            "type": " string"
        }]
    }
}
 

 

字典和json字符串一样都是包在{}中间

字典 字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值 key
=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示: d = {key1 : value1, key2 : value2 } 一个简单的字典实例: dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'} 1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住。 2)键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行。 json 通过抓包以 JSON Text形式查看的JSON数据实例如下: { "studentInfo": { "id":123456, "stu_name":"Dorra" } } json:是一种数据格式,是纯字符串。可以被解析成Python的dict或者其他形式。 dict:是一个完整的数据结构,是对Hash Table这一数据结构的一种实现,是一套从存储到提取都封装好了的方案。 区别: json的key只能是字符串,python的dict可以是任何可hash对象(hashtable type)。 json的key可以是有序、重复的;dict的key不可以重复。 json的value只能是字符串、浮点数、布尔值或者null,或者它们构成的数组或者对象。 json任意key存在默认值undefined,dict默认没有默认值。 json访问方式可以是[],也可以是.,遍历方式分in、of;dict的value仅可以下标访问。 json的字符串强制双引号,dict字符串可以单引号、双引号。 dict可以嵌套tuple,json里只有数组。 json:truefalsenull。 python:True、False、None。 json中文必须是unicode编码,如"u6211"。 json的类型是字符串,字典的类型是字典。

 

字典 dict 和 json 如何相互转化, 将字典数据转 json 格式写入文件,然后从文件中读取出来还原为字典。

三、知识点

  • 文件读写
  • 基础语法
  • 多级字典
  • json

四、代码展示

使用的模块

import platform
import json

 

输入多级字典数据

复制代码
input_dict = {
    "students": [
        {"name": "John", "age": "15"},
        {"name": "Anna", "age": "16"},
        {"name": "Peter", "age": "16"}
    ],
    "teachers": [
        {"name": "Jack", "age": "30"},
        {"name": "Jessy", "age": "33"}
    ]}

print("输入数据: ", input_dict)
复制代码

 

字典 dict 转 json, 写入文件

def dict_to_json():

    with open("py013.json", "w") as f:
        f.write(json.dumps(input_dict, indent=4))

 

json 转 字典 dict , 从文件读取

def json_to_dict():

    with open("py013.json") as f:
        output_dict = json.loads(f.read())

 

全部代码

复制代码
import platform
import json

print("孟曰:如欲平治天下,当今之世,舍我其谁也?")
print("字典 dict 和 json 如何相互转化 ")


input_dict = {
    "students": [
        {"name": "John", "age": "15"},
        {"name": "Anna", "age": "16"},
        {"name": "Peter", "age": "16"}
    ],
    "teachers": [
        {"name": "Jack", "age": "30"},
        {"name": "Jessy", "age": "33"}
    ]}

print("输入数据: ", input_dict)


def dict_to_json():

    with open("py013.json", "w") as f:
        f.write(json.dumps(input_dict, indent=4))


def json_to_dict():

    with open("py013.json") as f:
        output_dict = json.loads(f.read())

    print("json 转字典的结果: ", output_dict)


dict_to_json()

json_to_dict()

print("Python 版本", platform.python_version())
复制代码

 

效果展示


Json 格式数据

复制代码
{
    "students": [
        {
            "name": "John",
            "age": "15"
        },
        {
            "name": "Anna",
            "age": "16"
        },
        {
            "name": "Peter",
            "age": "16"
        }
    ],
    "teachers": [
        {
            "name": "Jack",
            "age": "30"
        },
        {
            "name": "Jessy",
            "age": "33"
        }
    ]
}
复制代码

 

import json
dict_test = {"name":"方鹏程","age":12,"birth":"1991-08-27"}
str1 = json.dumps(dict_test,indent=1)
print(str1,type(str1))

# with open("a.txt","a") as f:
#     f.write(dict_test)
dict1= json.loads(str1)
print(dict1,type(dict1))

# 创建str实例,在Python中,你可以直接调用类(包括内建类型)来创建一个新的实例。
my_string = "Hello, World!"  # 使用字面量
my_string_instance = str("Hello, World!")  # 使用类名


# 创建dict实例
my_dict = {'name': 'Alice', 'age': 30}  # 使用字面量
my_dict_instance = dict(name='Alice', age=30)  # 正确的方式
# 使用new创建str实例
my_string_new = str.__new__(str, "Hello, World!")
print(my_string_new)  # 输出:Hello, World!

str = "This is a string"  # 错误:这里将str赋值为一个字符串,覆盖了内置的str类
my_string_instance = str("Hello, World!")  # 这将引发错误,因为str现在是一个字符串,不是类.永远不要将内置类型(如 str、dict、list 等)的名称用作变量名

 

posted @ 2022-08-11 07:57  *Tesla*  阅读(58)  评论(0)    收藏  举报
       [00:00.000] 作词 : 陈信荣
    [00:01.000] 作曲 : 周传雄
    [00:02.000] 编曲 : 周传雄
    [00:03.000] 制作人 : 周传雄
    [00:29.259]过完整个夏天
    [00:34.742]忧伤并没有好一些
    [00:41.185]开车行驶在公路无际无边
    [00:47.320]有离开自己的感觉
    [00:52.453]
    [00:53.347]唱不完一首歌
    [00:59.370]疲倦还剩下黑眼圈
    [01:05.596]感情的世界伤害在所难免
    [01:11.703]黄昏再美终要黑夜
    [01:18.292]依然记得从你口中说出再见坚决如铁
    [01:24.732]昏暗中有种烈日灼身的错觉
    [01:30.171]黄昏的地平线
    [01:33.230]划出一句离别
    [01:36.313]爱情进入永夜
    [01:42.165]
    [01:42.881]依然记得从你眼中滑落的泪伤心欲绝
    [01:49.290]混乱中有种热泪烧伤的错觉
    [01:54.774]黄昏的地平线
    [01:57.816]割断幸福喜悦
    [02:00.915]相爱已经幻灭
    [02:07.171]
    [02:19.647]唱不完一首歌
    [02:25.497]疲倦还剩下黑眼圈
    [02:31.753]感情的世界伤害在所难免
    [02:37.881]黄昏再美终要黑夜
    [02:42.994]
    [02:44.363]依然记得从你口中说出再见坚决如铁
    [02:50.872]昏暗中有种烈日灼身的错觉
    [02:56.291]黄昏的地平线
    [02:59.393]划出一句离别
    [03:02.507]爱情进入永夜
    [03:08.340]
    [03:09.205]依然记得从你眼中滑落的泪伤心欲绝
    [03:15.531]混乱中有种热泪烧伤的错觉
    [03:20.937]黄昏的地平线
    [03:23.991]割断幸福喜悦
    [03:27.025]相爱已经幻灭
    [03:34.375]
    [03:58.563]依然记得从你口中说出再见坚决如铁
    [04:04.694]昏暗中有种烈日灼身的错觉
    [04:10.141]黄昏的地平线
    [04:13.156]划出一句离别
    [04:16.228]爱情进入永夜
    [04:21.297]
    [04:22.863]依然记得从你眼中滑落的泪伤心欲绝
    [04:29.401]混乱中有种热泪烧伤的错觉
    [04:34.714]黄昏的地平线
    [04:37.774]割断幸福喜悦
    [04:40.913]相爱已经幻灭
    [05:39.200] 配唱制作人 : 吴佳明
    [05:39.533] 钢琴 : 周传雄
    [05:39.866] 吉他 : 许华强
    [05:40.199] 鼓 : Gary Gideon
    [05:40.532] 贝斯 : Andy Peterson
    [05:40.865] 弦乐编写 : 吴庆隆
    [05:41.198] 弦乐 : 孔朝晖/顾文丽/隋晶晶/梁中枢/尹淑占/王言/关旗
    [05:41.531] 和声编写 : 周传雄
    [05:41.864] 和声 : 周传雄
    [05:42.197] 录音师 : 林世龙/沈文钏/Geoffrey Lee
    [05:42.530] 混音师 : 王晋溢
    [05:42.863] 录音室 : 强力/HASAYAKE/Atomic & Audioplex (Singapore)
    [05:43.196] 混音室 : 白金
    [05:43.529] OP : Sony/ATV Music Publishing Taiwan/哈萨雅琪有限公司
    [05:43.862] SP : Sony/ATV Music Publishing Taiwan​