读取数据库JSON格式数据信息处理办法记录

发布时间 2023-05-22 15:51:29作者: No九五二七9527

遇到的问题:

现有代码如下

def ListQuery(self):

  sql01="SELECT content FROM zt_user_customdata \
    WHERE realname='alarm-server' AND account='alarm-server'"         
    result01= self.CommonQueryFunc(sql01) 
    result02 = str(result01[0][0]).strip()
    result03 =json.load(result02) 
    return result03

 

但是运行后报错如下:

Traceback (most recent call last): File "C:\Users\Administrator\eclipse-workspace\ZZ-ServerControl\src\AlarmFiltering.py", line 56, in <module> A = AlarmFiltering() File "C:\Users\Administrator\eclipse-workspace\ZZ-ServerControl\src\AlarmFiltering.py", line 13, in __init__ self.ListQueryResult = self.ListQuery() File "C:\Users\Administrator\eclipse-workspace\ZZ-ServerControl\src\AlarmFiltering.py", line 22, in ListQuery result03 =json.load(result02) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\json\__init__.py", line 293, in load return loads(fp.read(), AttributeError: 'str' object has no attribute 'read' 

这个错误的原因是 json.load() 函数需要一个 file-like object 作为参数,但 result02 是一个 str 对象,所以 json.load() 函数无法解析这个对象。要解决这个问题,可以通过将 result02 转换为 file-like object,可以使用 io.StringIO 类来创建一个临时的 file-like object,然后将 result02 的值写入临时对象中,最后传入 json.load() 函数即可。代码示例如下:

import io

def ListQuery(self):
  sql01 = "SELECT content FROM zt_user_customdata WHERE realname='alarm-server' AND account='alarm-server'"
  result01 = self.CommonQueryFunc(sql01)
  result02 = str(result01[0][0]).strip()
  temp_file = io.StringIO(result02)
  result03 = json.load(temp_file)
  return result03

 

这段代码使用 io.StringIO() 创建临时文件对象,然后使用 write() 方法将 str 对象 result02 写入文件对象中。最后,使用 json.load() 函数读取临时文件对象并返回解析结果。