2017-08-03 4 views
1

Ich möchte eine JSON-Repräsentation einer Klasse erstellen und ändern Sie die Eigenschaftsnamen automatisch von snake_case zu lowerCamelCase, wie ich PEP8 in Python und auch die JavaScript-Namenskonventionen (und vielleicht noch wichtiger, das Backend, mit dem ich kommuniziere, verwendet lowerCamelCase).JSON Serialisieren einer Klasse und Ändern der Eigenschaft Gehäuse mit Python

Ich bevorzuge die Verwendung des Standards json-Modul, aber ich habe nichts gegen die Verwendung einer anderen, Open-Source-Bibliothek (z. B. jsonpickle könnte mein Problem lösen?).

Antwort

1

Sie müssen nur eine Funktion erstellen, um die snake_case-Schlüssel in camelCase umzuwandeln. Sie können dies leicht mit .split, .lower und .title tun.

import json 

class HardwareProfile: 
    def __init__(self, vm_size): 
     self.vm_size = vm_size 
     self.some_other_thing = 42 
     self.a = 'a' 

def snake_to_camel(s): 
    a = s.split('_') 
    a[0] = a[0].lower() 
    if len(a) > 1: 
     a[1:] = [u.title() for u in a[1:]] 
    return ''.join(a) 

def serialise(obj): 
    return {snake_to_camel(k): v for k, v in obj.__dict__.items()} 

hp = HardwareProfile('Large') 
print(json.dumps(serialise(hp), indent=4, default=serialise)) 

Ausgang

{ 
    "vmSize": "Large", 
    "someOtherThing": 42, 
    "a": "a" 
} 

Sie serialise in einem lambda setzen könnte, aber ich denke, es ist besser lesbar ist es als eine richtige def Funktion zu schreiben.

Verwandte Themen