首页 > 技术文章 > python3 json模块

lilyxiaoyy 2019-04-29 14:15 原文

import json


"""将python的字典和列表转化为json字符串。json是前后端交互的枢纽"""
dic = {'name': '莉莉', 'age':18}
str_json = json.dumps(dic, ensure_ascii=False)  # 将python中的字典转换为json字符串
print(str_json)
print(type(str_json))

lst = ["苹果", "桃子", "梨子"]
str2_json = json.dumps(lst, ensure_ascii=False)  # 将python中的列表转化为json字符串
print(str2_json)
print(type(str2_json))
{"name": "莉莉", "age": 18}
<class 'str'>
["苹果", "桃子", "梨子"]
<class 'str'>

import json


"""将json字符串转化为Python的数据类型"""
str_json = '{"name": "莉莉", "age": 18}'
dic = json.loads(str_json)  # 安全
print(dic)
print(type(dic))

print(eval(str_json))  # 不安全

str2_json = '["苹果", "桃子", "梨子"]'
lst = json.loads(str2_json)
print(lst)
print(type(lst))
{'name': '莉莉', 'age': 18}
<class 'dict'>
{'name': '莉莉', 'age': 18}
['苹果', '桃子', '梨子']
<class 'list'>

 

import json

# 将dict字典类型数据转换为json字符串
dic = {"name": "莉莉", "age": 18}
json_str = json.dumps(dic, ensure_ascii=False)
print(json_str)
print(type(json_str))

# 将json字符串转换为dict字典类型
json_str = '{"name": "lily", "age": 18}'
dic = json.loads(json_str)
print(dic)
print(type(dic))
{"name": "莉莉", "age": 18}
<class 'str'>
{'name': 'lily', 'age': 18}
<class 'dict'>

import json

# 将list类型数据转换为json字符串
dic = ["莉莉", 18]
json_str = json.dumps(dic, ensure_ascii=False)
print(json_str)
print(type(json_str))

# 将json字符串转换为list类型
json_str = '["莉莉", 18]'
dic = json.loads(json_str)
print(dic)
print(type(dic))
["莉莉", 18]
<class 'str'>
['莉莉', 18]
<class 'list'>

import json

# 将tuple类型数据转换为json字符串
dic = ("莉莉", 18)
json_str = json.dumps(dic, ensure_ascii=False)
print(json_str)
print(type(json_str))

# 将json字符串转换为list类型
json_str = '["莉莉", 18]'
dic = json.loads(json_str)
print(dic)
print(type(dic))
["莉莉", 18]
<class 'str'>
['莉莉', 18]
<class 'list'>

import json

# 将set类型数据不能转换为json字符串
dic = {"莉莉", 18}
json_str = json.dumps(dic, ensure_ascii=False)
print(json_str)
print(type(json_str))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-72-62a9e6cbaec2> in <module>()
      3 # 将set类型数据不能转换为json字符串
      4 dic = {"莉莉", 18}
----> 5 json_str = json.dumps(dic, ensure_ascii=False)
      6 print(json_str)
      7 print(type(json_str))

~\Anaconda3\lib\json\__init__.py in dumps(obj, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, default, sort_keys, **kw)
    236         check_circular=check_circular, allow_nan=allow_nan, indent=indent,
    237         separators=separators, default=default, sort_keys=sort_keys,
--> 238         **kw).encode(obj)
    239 
    240 

~\Anaconda3\lib\json\encoder.py in encode(self, o)
    197         # exceptions aren't as detailed.  The list call should be roughly
    198         # equivalent to the PySequence_Fast that ''.join() would do.
--> 199         chunks = self.iterencode(o, _one_shot=True)
    200         if not isinstance(chunks, (list, tuple)):
    201             chunks = list(chunks)

~\Anaconda3\lib\json\encoder.py in iterencode(self, o, _one_shot)
    255                 self.key_separator, self.item_separator, self.sort_keys,
    256                 self.skipkeys, _one_shot)
--> 257         return _iterencode(o, 0)
    258 
    259 def _make_iterencode(markers, _default, _encoder, _indent, _floatstr,

~\Anaconda3\lib\json\encoder.py in default(self, o)
    178         """
    179         raise TypeError("Object of type '%s' is not JSON serializable" %
--> 180                         o.__class__.__name__)
    181 
    182     def encode(self, o):

TypeError: Object of type 'set' is not JSON serializable
import json


"""将Python的数据类型dict或list转换为json字符串,并写入文件中"""
dic = {'name': '莉莉', 'age':18}
json.dump(dic, open("user.json", "w"), ensure_ascii=False)

lst = ["苹果", "桃子", "梨子"]
json.dump(lst, open("fruit.json", "w"), ensure_ascii=False)

 

import json


"""读取文件中的json字符串"""
dic = json.load(open("user.json", "r"))
print(dic)
print(type(dic))

lst = json.load(open("fruit.json", "r"))
print(lst)
print(type(lst))
{'name': '莉莉', 'age': 18}
<class 'dict'>
['苹果', '桃子', '梨子']
<class 'list'>

import json


"""前端json和python字典、列表的区别:前端true, false, null,双引号 ==》对应python的True, False, None, 单引号"""
lst = [True, False, None, '引号']
print(json.dumps(lst, ensure_ascii=False))
[true, false, null, "引号"]



推荐阅读