JSON的全称是JavaScript Object Notation,即JavaScript对象符号,它是一种轻量级、跨平台、跨语言的数据交换格式,其设计意图是把所有事情都用设计的字符串来表示,这样既方便在互联网上传递信息,也方便人进行阅读。
JSON主要有两种数据结构:
- 由kye-value对组成的数据结构。这种数据结构在不同的语言中有不同的实现。例如在Python中是一种dict对象;在C语言中是一个struct;在其他语言中,则可能是record等。
- 有序集合。这种数据结构在Python中对应于列表list;在其他语言中,可能对应于list等。
kye-value对组成的数据结构(对应Python中字典dict)
方法一:
data = {}
result_data = {}
data['name'] = 'John'
data['age'] = 15
result_data['result'] = 'OK'
result_data['message'] = 'success'
result_data['data'] = data
s = json.dumps(result_data)
print(type(s), s)
方法二:
s1 = '{"result":"OK", "message":"success", "data":{"name":"jone", "age":"15"}}'
print(type(s1), s1)
response = json.loads(s1)
print(response)
有序集合(对应Python中列表list)
book_list1 = [{'imgs_name':['1_1.jpg', '1_2.jpg', '1_3.jpg'], 'imgs_w':[1080, 720, 640], 'imgs_h':[1440, 1080, 640]}, {'imgs_name':['1_1.jpg', '1_2.jpg', '1_3.jpg'], 'imgs_w':[1080, 720, 640], 'imgs_h':[1440, 1080, 640]}]
print('book_list1(list->json):', type(book_list1), book_list1)
book_json1 = json.dumps(book_list1)
print('book_json1(list->json):', type(book_json1), book_json1)
# not the same
#book_json2 = '[{"imgs_name":["1_1.jpg","1_2.jpg","1_3.jpg"],"imgs_w":["1080","720","640"],"imgs_h":["1440","1080","640"]},{"imgs_name":["1_1.jpg","1_2.jpg","1_3.jpg"],"imgs_w":["1080","720","640"],"imgs_h":["1440","1080","640"]}]'
# not the same
#book_json2 = '[{"imgs_name": ["1_1.jpg", "1_2.jpg", "1_3.jpg"], "imgs_w": ["1080", "720", "640"], "imgs_h": ["1440", "1080", "640"]}, {"imgs_name": ["1_1.jpg", "1_2.jpg", "1_3.jpg"], "imgs_w": ["1080", "720", "640"], "imgs_h": ["1440", "1080", "640"]}]'
# same
book_json2 = '[{"imgs_name": ["1_1.jpg", "1_2.jpg", "1_3.jpg"], "imgs_w": [1080, 720, 640], "imgs_h": [1440, 1080, 640]}, {"imgs_name": ["1_1.jpg", "1_2.jpg", "1_3.jpg"], "imgs_w": [1080, 720, 640], "imgs_h": [1440, 1080, 640]}]'
# shell input format
#book_json_input = [{\"imgs_name\":[\"1_1.jpg\",\"1_2.jpg\",\"1_3.jpg\"],\"imgs_w\":[\"1080\",\"720\",\"640\"],\"imgs_h\":[\"1440\",\"1080\",\"640\"]},{\"imgs_name\":[\"1_1.jpg\",\"1_2.jpg\",\"1_3.jpg\"],\"imgs_w\":[\"1080\",\"720\",\"640\"],\"imgs_h\":[\"1440\",\"1080\",\"640\"]}]
print('book_json2(json->list):', type(book_json2), book_json2)
book_list2 = json.loads(book_json2)
print('book_list2(json->list):', type(book_list2), book_list2)
print('book_list2[0](json->list):', book_list2[0])
from difflib import Differ
d = Differ()
diff = d.compare(book_json1.splitlines(), book_json2.splitlines())
print('\n'.join(list(diff)))
if book_json1 == book_json2:
print('book_json1 and book_json2 is the same!')
else:
print('book_json1 and book_json2 is not the same!')