|
|
import json
|
|
|
|
|
|
####################################
|
|
|
#Info: Internal JSONNormalize module of the Robot app (OpenRPA - Robot)
|
|
|
####################################
|
|
|
# JSONNormalize Module - Prepare dict or list for JSON (delete object from the structure)
|
|
|
|
|
|
###############################
|
|
|
####Нормализация под JSON (в JSON нельзя передавать классы - только null, числа, строки, словари и массивы)
|
|
|
###############################
|
|
|
#Нормализация словаря под JSON
|
|
|
def JSONNormalizeDict(inDictionary):
|
|
|
#Сделать копию объекта
|
|
|
lResult=inDictionary.copy()
|
|
|
#Перебор всех элементов
|
|
|
for lItemKey,lItemValue in inDictionary.items():
|
|
|
#Флаг удаления атрибута
|
|
|
lFlagRemoveAttribute=False
|
|
|
#Если строка или число или массив или объект или None - оставить
|
|
|
if (
|
|
|
type(lItemValue) is dict or
|
|
|
type(lItemValue) is int or
|
|
|
type(lItemValue) is str or
|
|
|
type(lItemValue) is list or
|
|
|
lItemValue is None):
|
|
|
True==True
|
|
|
else:
|
|
|
lFlagRemoveAttribute=True
|
|
|
#Рекурсивный вызов, если объект является словарем
|
|
|
if type(lItemValue) is dict:
|
|
|
lResult[lItemKey]=JSONNormalizeDict(lItemValue)
|
|
|
#Рекурсивный вызов, если объект является списком
|
|
|
if type(lItemValue) is list:
|
|
|
lResult[lItemKey]=JSONNormalizeList(lItemValue)
|
|
|
#############################
|
|
|
#Конструкция по удалению ключа из словаря
|
|
|
if lFlagRemoveAttribute:
|
|
|
lResult.pop(lItemKey)
|
|
|
#Вернуть результат
|
|
|
return lResult
|
|
|
#Нормализация массива под JSON
|
|
|
def JSONNormalizeList(inList):
|
|
|
lResult=[]
|
|
|
#Циклический обход
|
|
|
for lItemValue in inList:
|
|
|
#Если строка или число или массив или объект или None - оставить
|
|
|
if (
|
|
|
type(lItemValue) is int or
|
|
|
type(lItemValue) is str or
|
|
|
lItemValue is None):
|
|
|
lResult.append(lItemValue)
|
|
|
#Если является словарем - вызвать функцию нормализации словаря
|
|
|
if type(lItemValue) is dict:
|
|
|
lResult.append(JSONNormalizeDict(lItemValue))
|
|
|
#Если является массиваом - вызвать функцию нормализации массива
|
|
|
if type(lItemValue) is list:
|
|
|
lResult.append(JSONNormalizeList(lItemValue))
|
|
|
#Вернуть результат
|
|
|
return lResult
|
|
|
#Определить объект - dict or list - и нормализовать его для JSON
|
|
|
def JSONNormalizeDictList(inDictList):
|
|
|
lResult={}
|
|
|
if type(inDictList) is dict:
|
|
|
lResult=JSONNormalizeDict(inDictList)
|
|
|
if type(inDictList) is list:
|
|
|
lResult=JSONNormalizeList(inDictList)
|
|
|
return lResult;
|
|
|
|
|
|
|