2016-05-12 10 views
-1

ich ein Datastor erstellt habe, und die Art der Felder im Datenspeicher haben im JSON-Format gespeichert. So etwas wieKonvertieren eines String-Objekt Typ - Python

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

Nun, wenn ich die json mit json.load laden, wird die Art des Feldes kain wird als Unicode geladen. Gibt es in Python vordefinierte Methoden, mit denen dieses String-to-Type-Objekt typisiert werden kann? Natürlich kann ich eine Funktion machen, die das Problem behandeln und lösen würde. Aber wenn es bereits eine Lösung für diesen in der Python-Bibliothek ist, dann wäre es ein wenig Aufwand sparen und möglicherweise effizienter im Umgang mit dem Problem, als ich tun könnte.

+4

Wie werden Sie das JSON-Datei erstellen? Bei beiden Python 2 und 3 Typen ist JSON nicht serialisierbar. –

+0

das Python json-Modul verwenden und die dict eines Objekt Speicher –

Antwort

2

Es gibt keine Lösung. JSON ist ein universelles Format für alle Sprachen und es macht keinen Sinn, Python-Klassen zu speichern. Sie müssen einen festen Weg definieren, um zwischen Strings und Typen hin- und herzuwechseln, einschließlich der Festlegung, welche Typen akzeptabel sind. Hier ein Beispiel:

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

Sie können das Modul Gurke verwenden, um die Typumwandlung zu lösen. Dieses Modul kann die Instanzen in einen String Die Dokumentation serialisiert ist auf https://docs.python.org/2/library/pickle.html

Beispiel

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

Verwendung deserialisieren:

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

Dies als ich tatsächlich wahrscheinlich eine bessere Antwort ist, weil die Frage impliziert, dass die Daten nur von Python in diesem Fall mit JSON geschrieben werden und lesen ist sinnlos. Meine Antwort ist nur nützlich, wenn eine andere Sprache den Typ analysieren muss. Die Verwendung von Gurken ist auch viel einfacher zum Speichern von benutzerdefinierten Klassen und so weiter. –

Verwandte Themen