2016-05-12 89 views
-1

我已經創建了一個DataStore,並且數據存儲中的字段類型已經以json格式保存。 喜歡的東西將字符串轉換爲類型對象 - Python

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

現在,當我使用json.load加載JSON,場該隱的類型被加載爲Unicode。 python中是否有預定義的方法可用於將此String類型轉換爲Type對象。當然,我可以做一個處理和解決問題的功能。但是,如果在python庫中已經有了解決方案,那麼它將節省一些開銷,並且可能比我更有效地處理該問題。

+4

你是如何創造這個JSON文件?在Python 2和3類型中都不是JSON可序列化的。 –

+0

使用python json模塊並保存對象的字典 –

回答

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

您可以使用模塊pickle來解決類型轉換。該模塊可序列化的情況下轉換成字符串 的文件出現在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是毫無意義的。我的答案只有在不同的語言需要解析類型時纔有用。使用泡菜也將更容易存儲自定義類等。 –