I am having an issue when trying to convert a class object to JSON format. Actually, I have an ECG class object and my expectation is to convert that object to a string in JSON format.
Ex: { “Source”: “MIT”, “FileName”: “100”, “Channel”: 2, “Record”: 11520000, “Time”: 1800, “SampleRate”: 500 }
ECGModel.py
JavaScript
x
35
35
1
class ECG(object):
2
@classmethod
3
def __init__(self, source, fileName, channel, record, time, sampleRate, ecg):
4
self.Source = source
5
self.FileName = fileName
6
self.Channel = channel
7
self.Record = record
8
self.Time = time
9
self.SampleRate = sampleRate
10
self.ECG = ecg
11
12
# getting the values
13
@property
14
def value(self):
15
print('Getting value')
16
return self.Source, self.FileName, self.Channel, self.Record, self.Time, self.SampleRate, self.ECG
17
18
# setting the values
19
@value.setter
20
def value(self, source, fileName, channel, record, time, sampleRate, ecg):
21
print('Setting value to ' + source)
22
self.Source = source
23
self.FileName = fileName
24
self.Channel = channel
25
self.Record = record
26
self.Time = time
27
self.SampleRate = sampleRate
28
self.ECG = ecg
29
30
# deleting the values
31
@value.deleter
32
def value(self):
33
print('Deleting value')
34
del self.Source, self.Source, self.FileName, self.Channel, self.Record, self.Time, self.SampleRate, self.ECG
35
Main.py
JavaScript
1
11
11
1
import streamlit as st
2
import Processor as processor
3
import json
4
5
ecgProperty = processor.GetSourceProperty(r"C:Users100.dat")
6
7
st.write(type(ecgProperty))
8
st.write(ecgProperty)
9
jsonECGPropertyStr = json.dumps(ecgProperty.__dict__)
10
st.write(jsonECGPropertyStr)
11
Processor.py
JavaScript
1
13
13
1
import streamlit as st
2
import Controllers.ECGModel as ecgModel
3
4
def GetSourceProperty(filePath):
5
ecg = ecgModel.ECG
6
ecg.Source = "MIT"
7
ecg.FileName = "100"
8
ecg.Channel = 2
9
ecg.Record = 11520000
10
ecg.Time = 1800
11
ecg.SampleRate = 500
12
return ecg
13
Log:
JavaScript
1
16
16
1
<class 'type'>
2
<class 'Controllers.ECGModel.ECG'>
3
File "C:UsersxxxAppDataLocalProgramsPythonPython39libsite-packagesstreamlitscript_runner.py", line 354, in _run_script
4
exec(code, module.__dict__)
5
File "D:SourceCodeBIS2019_MasterThesisECG_EvaluationMain.py", line 27, in <module>
6
jsonECGPropertyStr = json.dumps(ecgProperty.__dict__)
7
File "C:UsersxxxAppDataLocalProgramsPythonPython39libjson__init__.py", line 231, in dumps
8
return _default_encoder.encode(obj)
9
File "C:UsersxxxAppDataLocalProgramsPythonPython39libjsonencoder.py", line 199, in encode
10
chunks = self.iterencode(o, _one_shot=True)
11
File "C:UsersxxxAppDataLocalProgramsPythonPython39libjsonencoder.py", line 257, in iterencode
12
return _iterencode(o, 0)
13
File "C:UsersxxxAppDataLocalProgramsPythonPython39libjsonencoder.py", line 179, in default
14
raise TypeError(f'Object of type {o.__class__.__name__} '
15
TypeError: Object of type mappingproxy is not JSON serializable
16
Advertisement
Answer
I tried to guess what you are trying to achieve. See if the following codes work for you
ECGModel.py
JavaScript
1
9
1
class ECG:
2
def __init__(self, source, file_name, channel, record, time, sample_rate):
3
self.source = source
4
self.file_name = file_name
5
self.channel = channel
6
self.record = record
7
self.time = time
8
self.sample_rate = sample_rate
9
Processor.py
JavaScript
1
6
1
from ECGModel import ECG
2
3
4
def GetSourceProperty():
5
return ECG(source="MIT", file_name="100", channel=2, record=11520000, time=1800, sample_rate=500)
6
Main.py:
You may replace print
with your st.write
JavaScript
1
9
1
import Processor
2
import json
3
4
ecg = Processor.GetSourceProperty()
5
6
print(type(ecg))
7
print(ecg)
8
print(json.dumps(ecg.__dict__))
9
Output
JavaScript
1
4
1
<class 'ECGModel.ECG'>
2
<ECGModel.ECG object at 0x000002ED4E82B670>
3
{"source": "MIT", "file_name": "100", "channel": 2, "record": 11520000, "time": 1800, "sample_rate": 500}
4