TypeError: Object of type mappingproxy is not JSON serializable
TypeError: Object of type mappingproxy is not JSON serializable
我在尝试将 class 对象转换为 JSON 格式时遇到问题。
实际上,我有一个 ECG class 对象,我的期望是将该对象转换为 JSON 格式的字符串。
Ex: { "Source": "MIT", "FileName": "100", "Channel": 2, "Record": 11520000, "Time": 1800, "SampleRate": 500 }
ECGModel.py
class ECG(object):
@classmethod
def __init__(self, source, fileName, channel, record, time, sampleRate, ecg):
self.Source = source
self.FileName = fileName
self.Channel = channel
self.Record = record
self.Time = time
self.SampleRate = sampleRate
self.ECG = ecg
# getting the values
@property
def value(self):
print('Getting value')
return self.Source, self.FileName, self.Channel, self.Record, self.Time, self.SampleRate, self.ECG
# setting the values
@value.setter
def value(self, source, fileName, channel, record, time, sampleRate, ecg):
print('Setting value to ' + source)
self.Source = source
self.FileName = fileName
self.Channel = channel
self.Record = record
self.Time = time
self.SampleRate = sampleRate
self.ECG = ecg
# deleting the values
@value.deleter
def value(self):
print('Deleting value')
del self.Source, self.Source, self.FileName, self.Channel, self.Record, self.Time, self.SampleRate, self.ECG
Main.py
import streamlit as st
import Processor as processor
import json
ecgProperty = processor.GetSourceProperty(r"C:\Users0.dat")
st.write(type(ecgProperty))
st.write(ecgProperty)
jsonECGPropertyStr = json.dumps(ecgProperty.__dict__)
st.write(jsonECGPropertyStr)
Processor.py
import streamlit as st
import Controllers.ECGModel as ecgModel
def GetSourceProperty(filePath):
ecg = ecgModel.ECG
ecg.Source = "MIT"
ecg.FileName = "100"
ecg.Channel = 2
ecg.Record = 11520000
ecg.Time = 1800
ecg.SampleRate = 500
return ecg
日志:
<class 'type'>
<class 'Controllers.ECGModel.ECG'>
File "C:\Users\xxx\AppData\Local\Programs\Python\Python39\lib\site-packages\streamlit\script_runner.py", line 354, in _run_script
exec(code, module.__dict__)
File "D:\SourceCode\BIS2019_MasterThesis\ECG_Evaluation\Main.py", line 27, in <module>
jsonECGPropertyStr = json.dumps(ecgProperty.__dict__)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python39\lib\json\__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python39\lib\json\encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python39\lib\json\encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python39\lib\json\encoder.py", line 179, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type mappingproxy is not JSON serializable
我试图猜测你想要达到的目的。查看以下代码是否适合您
ECGModel.py
class ECG:
def __init__(self, source, file_name, channel, record, time, sample_rate):
self.source = source
self.file_name = file_name
self.channel = channel
self.record = record
self.time = time
self.sample_rate = sample_rate
Processor.py
from ECGModel import ECG
def GetSourceProperty():
return ECG(source="MIT", file_name="100", channel=2, record=11520000, time=1800, sample_rate=500)
Main.py:
您可以将 print
替换为您的 st.write
import Processor
import json
ecg = Processor.GetSourceProperty()
print(type(ecg))
print(ecg)
print(json.dumps(ecg.__dict__))
输出
<class 'ECGModel.ECG'>
<ECGModel.ECG object at 0x000002ED4E82B670>
{"source": "MIT", "file_name": "100", "channel": 2, "record": 11520000, "time": 1800, "sample_rate": 500}
我在尝试将 class 对象转换为 JSON 格式时遇到问题。 实际上,我有一个 ECG class 对象,我的期望是将该对象转换为 JSON 格式的字符串。
Ex: { "Source": "MIT", "FileName": "100", "Channel": 2, "Record": 11520000, "Time": 1800, "SampleRate": 500 }
ECGModel.py
class ECG(object):
@classmethod
def __init__(self, source, fileName, channel, record, time, sampleRate, ecg):
self.Source = source
self.FileName = fileName
self.Channel = channel
self.Record = record
self.Time = time
self.SampleRate = sampleRate
self.ECG = ecg
# getting the values
@property
def value(self):
print('Getting value')
return self.Source, self.FileName, self.Channel, self.Record, self.Time, self.SampleRate, self.ECG
# setting the values
@value.setter
def value(self, source, fileName, channel, record, time, sampleRate, ecg):
print('Setting value to ' + source)
self.Source = source
self.FileName = fileName
self.Channel = channel
self.Record = record
self.Time = time
self.SampleRate = sampleRate
self.ECG = ecg
# deleting the values
@value.deleter
def value(self):
print('Deleting value')
del self.Source, self.Source, self.FileName, self.Channel, self.Record, self.Time, self.SampleRate, self.ECG
Main.py
import streamlit as st
import Processor as processor
import json
ecgProperty = processor.GetSourceProperty(r"C:\Users0.dat")
st.write(type(ecgProperty))
st.write(ecgProperty)
jsonECGPropertyStr = json.dumps(ecgProperty.__dict__)
st.write(jsonECGPropertyStr)
Processor.py
import streamlit as st
import Controllers.ECGModel as ecgModel
def GetSourceProperty(filePath):
ecg = ecgModel.ECG
ecg.Source = "MIT"
ecg.FileName = "100"
ecg.Channel = 2
ecg.Record = 11520000
ecg.Time = 1800
ecg.SampleRate = 500
return ecg
日志:
<class 'type'>
<class 'Controllers.ECGModel.ECG'>
File "C:\Users\xxx\AppData\Local\Programs\Python\Python39\lib\site-packages\streamlit\script_runner.py", line 354, in _run_script
exec(code, module.__dict__)
File "D:\SourceCode\BIS2019_MasterThesis\ECG_Evaluation\Main.py", line 27, in <module>
jsonECGPropertyStr = json.dumps(ecgProperty.__dict__)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python39\lib\json\__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python39\lib\json\encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python39\lib\json\encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python39\lib\json\encoder.py", line 179, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type mappingproxy is not JSON serializable
我试图猜测你想要达到的目的。查看以下代码是否适合您
ECGModel.py
class ECG:
def __init__(self, source, file_name, channel, record, time, sample_rate):
self.source = source
self.file_name = file_name
self.channel = channel
self.record = record
self.time = time
self.sample_rate = sample_rate
Processor.py
from ECGModel import ECG
def GetSourceProperty():
return ECG(source="MIT", file_name="100", channel=2, record=11520000, time=1800, sample_rate=500)
Main.py:
您可以将 print
替换为您的 st.write
import Processor
import json
ecg = Processor.GetSourceProperty()
print(type(ecg))
print(ecg)
print(json.dumps(ecg.__dict__))
输出
<class 'ECGModel.ECG'>
<ECGModel.ECG object at 0x000002ED4E82B670>
{"source": "MIT", "file_name": "100", "channel": 2, "record": 11520000, "time": 1800, "sample_rate": 500}