Python中的JSON格式

JSON(Java脚本对象表示法)是一种轻量级的,公认的数据交换格式。使用Python中的JSON格式化技术,我们可以将JSON字符串转换为Python对象,也可以将Python对象转换为JSON字符串。

要使用这些功能,我们需要使用Python的json模块。json模块随附于Python标准库。因此,首先我们必须先导入它。

import json

将Python对象转换为JSON字符串

在json模块中,有一些方法,例如dump()和dumps(),可将Python对象转换为JSON字符串。dump()方法有两个参数,第一个是对象,第二个是文件对象。此方法将对象以JSON格式的序列化为文件对象。同样,dumps()方法仅接受一个参数。参数是对象。它将对象转换为JSON字符串

范例程式码

import json
from io import StringIO
str_io_obj = StringIO()
#Use JSON Dump to make StringIO
json.dump(["India", "Australia", "Brazil"], str_io_obj)
print('StringIO Object value: ' + str(str_io_obj.getvalue()))
my_json = {
   "name" : "Kalyan",
   "age" : 25,
   "city" : 'Delhi'
}
print(json.dumps(my_json, indent=4))

输出结果

StringIO Object value: ["India", "Australia", "Brazil"] {
   "name": "Kalyan",
   "age": 25,
   "city": "Delhi"
}

将JSON字符串转换为Python对象

在这种情况下,我们将反序列化JSON字符串。有两种不同的方法。它们是load()和load()。这两种方法都将JSON文件作为参数。load()从文件对象数据转换为python对象,而load()从字符串类型数据转换为。

范例程式码

import json
from io import StringIO
str_io_obj = StringIO('["xyz", "abc", "xyz", "pqr"]')
#load from StringIO
print('Load: ' + str(json.load(str_io_obj)))
print('String to Json: ' + str(json.loads('{"xyz" : 1, "abc" : 2, "xyz" : 3, "pqr" : 4}')))

输出结果

Load: ['xyz', 'abc', 'xyz', 'pqr']
String to Json: {'xyz': 3, 'abc': 2, 'pqr': 4}

Python中的JSON编码器和解码器类

JSONEncoder类用于将Python对象转换为JSON格式。在此示例中,我们将看到如何使用JSONEncoder将复数对象转换为JSON类型对象。

范例程式码

import json
class Comp_Encoder(json.JSONEncoder):
   def default(self, comp_obj):
      if isinstance(comp_obj, complex):
      return [comp_obj.real, comp_obj.imag]
      return json.JSONEncoder.default(self, comp_obj)
      print(json.dumps(5+8j, cls=Comp_Encoder))

输出结果

[5.0, 8.0]

JSONDecoder类执行相反的操作。

范例程式码

import json
my_str = '{"Asim" : 25, "Priyesh" : 23, "Asim" : "28"}'
#Decode JSON using the JSONDecoder
print(json.JSONDecoder().decode(my_str))
print(json.JSONDecoder().raw_decode(my_str))

输出结果

{'Asim': '28', 'Priyesh': 23}
({'Asim': '28', 'Priyesh': 23}, 44)