2016-05-12 2 views
-1

Я создал DataStore, и тип полей в хранилище данных был сохранен в формате json. Что-то вродеПреобразование строки в объект типа - Python

{"SchemaName": "Caztor", "FieldType": {"cain": "<type 'float'>"}} 

Теперь, когда я загрузить JSON с помощью json.load, тип поля Cain загружается в Unicode. Существуют ли какие-либо предварительно определенные методы, доступные в python, которые можно использовать для приведения типа объекта String to Type. Конечно, я могу сделать функцию, которая будет обрабатывать и решать проблему. Но если в библиотеке python уже есть решение, это может сэкономить немного накладных расходов и может быть более эффективным в решении проблемы, чем я мог бы сделать.

+4

Как вы создаете этот файл JSON? Оба типа Python 2 и 3 не являются сериализуемыми JSON. –

+0

Использование модуля python json и сохранение dict объекта –

ответ

2

Решение отсутствует. JSON является универсальным форматом для всех языков, и для него не имеет смысла хранить классы Python. Вам необходимо определить фиксированный способ перехода между строками и типами, который включает определение допустимых типов. Вот пример:

class Example(object): 
    pass 

json_types = [int, float, str, Example] 

string_to_type_dict = {t.__name__: t for t in json_types} 

assert len(string_to_type_dict) == len(json_types) 

def string_to_type(s): 
    return string_to_type[s] 

def type_to_string(t): 
    return t.__name__ 
2

Вы можете использовать модуль рассола, чтобы решить тип. этот модуль может сериализовать экземпляры в строку В документации присутствует на https://docs.python.org/2/library/pickle.html

Пример

import pickle 
schema = {"SchemaName": "Caztor", "FieldType": {"cain": float}} 
result = pickle.dumps(schema) # Will result a string 

десериализовать использование:

result2 = pickle.loads(result) # Will result a dictionary with typecast 
+1

На самом деле это лучший ответ, чем мой, потому что вопрос подразумевает, что данные будут записываться и считываться только Python, и в этом случае использование JSON бессмысленно. Мой ответ полезен только в том случае, если на другом языке нужно разбирать тип. Использование pickle также будет намного проще для хранения пользовательских классов и так далее. –

Смежные вопросы