BigQuery | Google cloud
<==>
Python libraries to convert class to json, object and dict to Json and Json to Object (SmartJson)
SmartJson is a simple tool to convert any class or dict to JSON and convert json to Object.
Features:
- update list serialization
- Fix script
- Add script support enumeration (
enum
) - Already support type : *
class
*date
*datetime
*set
*OrderedDict
*deque
*list
*int
*float
*bool
*complex
*tuple
*str
*dict
*bytes
*None
-
from enum import Enum, IntEnum from scripts import SmartJson class LoggerLevel(Enum): CRITICAL = 'CRITICAL' ERROR = 'ERROR' WARNING = 'WARNING' INFO = 'INFO' DEBUG = 'DEBUG' NOTSET = "NOTSET" class Status(IntEnum): success = 0 failure = 1 print(SmartJson({'Log': LoggerLevel, 'Stat': Status}).serialize())
-
{ "Log": [ { "CRITICAL": "CRITICAL", "DEBUG": "DEBUG", "ERROR": "ERROR", "INFO": "INFO", "NOTSET": "data", "WARNING": "WARNING" } ], "Stat": [ { "failure": 1, "success": 0 } ] }
-
Fix script
-
update complex serialization
-
Add new method (
serializeToJsonFile
)convert your class to json file
-
dict :
Default parameter directory="output", filename="smart.json"
-
class :
Default parameter directory="output", filename="className.json"
-
-
SmartJson(Test()).serializeToJsonFile(directory="yourPath", filename="MyFileName.json")
-
SmartJson(Test()).serializeToJsonFile() :=> (output) :=> outpout/Test.json
-
Support :
Class
date
datetime
set
OrderedDict
deque
list
int
float
bool
complex
tuple
str
dict
bytes
None
smartjson
is released on PyPI, so all you need is:
$ pip install smartjson
To upgrade to latest version:
$ pip install --upgrade smartjson
Python >= 2.7 must be installed.
class or object or dict
: you want to convert to json
scripts
- source code of a packageexample.py
- working examples
- If unsure, open an issue for a discussion
- Create a fork
- Make your change
- Make a pull request
- Happy contribution!
import datetime
from collections import deque, OrderedDict
from scripts.__smart_json__ import SmartJson
class Test:
def __init__(self):
self.test = "none"
self.id = 2
self.date = datetime.datetime.now()
self.tuple = [((1, 'a'), (2, 'b'))]
data = {
"int": 1,
"str": "SmartJson",
"bytes": "pip install smartjson".encode("utf-8"),
"date": datetime.date(2010, 1, 1),
"datetime": datetime.datetime(2020, 1, 1, 18, 30, 0, 500),
"pull": Test(),
"set": (["1", 12, datetime.datetime.now()]),
"list": [datetime.datetime.now(), Test()],
"ordereddict": OrderedDict([
("b", OrderedDict([("b", Test()), ("a", datetime.datetime.now())])),
("a", OrderedDict([("b", 1), ("a", [((1, 'a'), (datetime.datetime.now(), 'b'))])])),
]),
"deque": deque([
deque([1, 2]),
deque([3, 4]),
])
}
class Pull:
def __init__(self):
self.id = 2
self.title = "Iam pull"
self.author = "Joel O."
self.subPull = Pull.SubPull()
self.data = data
self.date = datetime.datetime.now()
self.list = [1, datetime.datetime.now(), Pull.SubPull()]
class SubPull:
def __init__(self):
self.subId = 3
self.subTitle = "I am sub title"
self.subAuthor = "OKJ."
self.date = datetime.date(2010, 1, 1)
# Example
my_json = SmartJson(data).serialize()
print(my_json)
{
"bytes": "pip install smartjson",
"date": "2010-01-01",
"datetime": "2020-01-01 18:30:00.000500",
"deque": {
"1": 2,
"3": 4
},
"int": 1,
"list": [
"2019-10-01 19:39:01.916122",
{
"date": "2019-10-01 19:39:01.916122",
"id": 2,
"test": "none",
"tuple": [
[
[
1,
"a"
],
[
2,
"b"
]
]
]
}
],
"ordereddict": {
"a": {
"a": [
[
[
1,
"a"
],
[
"2019-10-01 19:39:01.916122",
"b"
]
]
],
"b": 1
},
"b": {
"a": "2019-10-01 19:39:01.916122",
"b": {
"date": "2019-10-01 19:39:01.916122",
"id": 2,
"test": "none",
"tuple": [
[
[
1,
"a"
],
[
2,
"b"
]
]
]
}
}
},
"pull": {
"date": "2019-10-01 19:39:01.916122",
"id": 2,
"test": "none",
"tuple": [
[
[
1,
"a"
],
[
2,
"b"
]
]
]
},
"set": [
"1",
12,
"2019-10-01 19:39:01.916122"
],
"str": "SmartJson"
}
objFromFile = smart_json.toObjectFromFile("jobs.json")
obj = smart_json.toObject('{"people":[{"name":"Scott", "website":"stackabuse.com", "from":"Nebraska"}]}')
obj2 = smart_json.toObject({'item': 'Beer', 'cost': '£4.00'})
print(obj2.item, obj2.cost)
print(objFromFile.job.item.another.precision)
print(obj.people[0].name, obj.people[0].website)
# Beer £4.00
# 99.56
# Scott stackabuse.com