Alle Feldnamen aus einem Protokollpuffer holen?

8

Ich möchte alle Feldnamen eines Proto in eine Liste aufnehmen. Gibt es eine Möglichkeit, dies zu tun? Ich habe in die Dokumentation geschaut und da scheint nichts zu sein.

    
user2253332 08.07.2014, 18:51
quelle

2 Antworten

8

Jede Proto-Klasse besitzt eine DESCRIPTOR-Klasse Variable , mit der die Felder der entsprechenden Protobuf-Nachrichten überprüft werden können.

Sehen Sie sich die Dokumentation des Deskriptors und FieldDescriptor Klassen für weitere Details .

Hier ist ein einfaches Beispiel, um die Namen aller Felder in message in eine Liste zu bekommen:

%Vor%     
qfiard 08.07.2014, 19:25
quelle
11

qfiards Antwort funktionierte nicht für mich. Aufruf von message.DESCRIPTOR.fields.keys() produced AttributeError: 'list' object has no attribute 'keys' .

Nicht sicher, warum es nicht funktionieren würde. Vielleicht hat es etwas damit zu tun, wie die Nachricht definiert / kompiliert wurde.

Die Problemumgehung bestand darin, eine Listenzusammensetzung der einzelnen Feldobjekte zu erstellen und die name -Eigenschaft für jede zu erhalten. Dies gab mir eine Liste von Strings aller Felder in dieser Liste.

%Vor%

Beachten Sie, dass Sie dadurch die Feldnamen in diesen Feldern nicht rekursiv erhalten.

    
ypx 21.01.2016 10:25
quelle

Tags und Links