2017-05-02 3 views
0

Ich möchte jedes Attribut in einem JSON-Format bestimmen, wo ich keine Ahnung über den Inhalt der JSON-Datei habe.Python bestimmen JSON-Attribute

Zum Beispiel habe ich diese verschiedenen Dateien contenent:

[ 
{ 
    "name": "abc", 
    "hobby": "swimming" 
}, 
{ 
    "name": "xyz", 
    "hobby": "programming" 
} 
] 

und das zweite Beispiel:

[ 
{ 
    "street": "PL EDOUARD BOUILLIERE", 
    "nb_places_totales": 249 
}, 
{ 
    "street": "CHE DU VERDON", 
    "nb_places_totales": 212 
} 
] 

Wie kann ich analysieren und bestimmen die Ausprägungs Namen Python?

+0

Es sieht so aus, als ob Ihr JSON aus einer 'liste' von' dict' Werten besteht. Sie können zuerst über die 'liste' iterieren und dann 'for key, value in dict.item()' ausführen, um über die 'dict'-Werte zu iterieren. Der 'Schlüssel' enthält die JSON-Schlüssel, nach denen Sie suchen. –

Antwort

1

Verwenden Sie das JSON-Paket, um die Datei zu analysieren. Dann können Sie die Schlüssel des ersten Elements in der Datenstruktur betrachten.

import json 

with open(filename) as fid: 
    data = json.load(fid) 

print(data[0].keys()) 
+0

Und wenn ich attributs zum Beispiel erhalten eingeschlossen: [ { "geo_shape": { \t \t \t \t "type": "Punkt", \t \t \t \t "Koordinaten": [ \t \t \t \t \t 1,437119162465912 , \t \t \t \t \t 43,63540081010507 \t \t \t \t] \t \t \t}, "nom":. "LA VACHE" } ] –

+0

In diesem Fall 'data [0] [ 'geo_shape'] Tasten()'. Sie müssen nur in die Liste/dict Struktur indexieren, bis Sie auf die entsprechende Ebene gelangen. Wenn Sie die Einträge überschleifen, um alle Schlüssel auf einer bestimmten Ebene zu erhalten, können Sie ein 'set'-Objekt verwenden, um die eindeutigen Schlüssel zu erhalten. –

0
data = """[ 
{ 
    "name": "abc", 
    "hobby": "swimming" 
}, 
{ 
    "name": "xyz", 
    "hobby": "programming" 
} 
]""" 

import json 
d = json.loads(data) # here I am loading from the string, but you can load from a json file by using json.load() instead of json.loads() 

# iterate through the list of dicts and print the keys for each dict 
for _ in d: 
    print _.keys() 

dies bewirkt:

[u'hobby', u'name'] 
[u'hobby', u'name'] 
0

Sie müssen sich für Wörterbuchschlüssel überprüfen, in python3:

import json 

a = json.loads(""" 
[{"name": "abc", "hobby": "swimming" }, 
{"name": "xyz", "hobby": "programming"}] 
""") 

b = json.loads(""" 
[{"street": "PL EDOUARD BOUILLIERE", "nb_places_totales": 249}, 
{"street": "CHE DU VERDON", "nb_places_totales": 212 }] 
""") 

print(*(i.keys() for i in a)) 
print(*(i.keys() for i in b)) 

aber jede Lösung irgendwie Inhalt sowieso abhängig sein.

-2

So erhalten Sie den Attributnamen. Wenn Sie Werte wünschen, drucken Sie den Wert anstelle des Schlüssels.

import json 
import sys 

obj1 = [ 
{ 
    "name": "abc", 
    "hobby": "swimming" 
}, 
{ 
    "man": "xyz", 
    "hobby": "programming" 
} 
] 

obj2 = [ 
{ 
    "street": "PL EDOUARD BOUILLIERE", 
    "nb_places_totales": 249 
}, 
{ 
    "street": "CHE DU VERDON", 
    "nb_places_totales": 212 
} 
] 

print "Obj1 Attributes" 
for i in range(0, len(obj1)): 
    for key, value in obj1[i].items(): 
     print key 


print "Obj2 Attributes" 
for j in range(0, len(obj2)): 
    for key, value in obj2[i].items(): 
     print key 
+0

Ich hoffe, Sie haben nicht 4000 Objekte ... –

+0

Dann entfernen Sie die erste Schleife .. ?? –

Verwandte Themen