2016-04-22 7 views
0

Ich habe eine json-like-Datei mit gültigem json pro Zeile, muss ich Parse json ohne explciitely den Schlüssel-Namen zu nennen

{"Some_key": {"name": "Tom", "school_code":"5678", "sport": "football", "score":"3.46", "classId": "456"}} 
{"Another_one": {"name": "Helen", "school_code":"7657", "sport": ["swimming", "score":"9.8", "classId": "865"}} 
{"Yet_another_one_": {"name": "Mikle", "school_code":"7655", "sport": "tennis", "score":"5.7", "classId": "76532"}} 

So Wörterbuch erstellen wie

aussieht (? Nicht wirklich brauchen, das Wörterbuch-Format, aber alles das könnte mir helfen, den Schlüssel mit dem Wert, Array von zwei Elementen für ex) zu assoziieren, indem diese ersten Schlüssel (dh "Some_Key", "Another_key" usw.) extrahiert werden, die ich vorher nicht kenne und ihnen dann den Wert zuordne der Score-Taste im Wörterbuch. so etwas wie:

("Some_key":"3.46", "Another_Key":"9.8", "Yet_another_one_"; "5.7") 

Ich weiß nicht die Methode, den Inhalt zu extrahieren, ohne die Schlüssel-Namen explizit zu nennen, so sind Ihre Ideen mehr als willkommen!

+0

Haben Sie bereits den JSON geparst? – Natecat

+0

Möchten Sie eine einzelne Abfrage in die Datei oder mehrere? Mit anderen Worten, möchten Sie den Inhalt der Datei in einer wiederverwendbaren Datenstruktur speichern, die im Speicher abgelegt ist, oder einfach diese Operation für die Datei ausführen? – martineau

+0

@martineau Ich wollte nur diese eine Operation für die Datei ausführen – Amanda

Antwort

5

Dies funktioniert für Python2 und Python3

>>> {k: v.get('score') for item in data for k, v in item.items()} 
{'Another_one': '9.8', 'Some_key': '3.46', 'Yet_another_one_': '5.7'} 
1

Wenn die json-like-Datei wirklich gültig json hat in jeder Zeile (Ihr Beispiel nicht ganz), könnten Sie so etwas wie die folgenden (in Python tun 2 oder 3):

import json 

with open('json-like.txt') as data_file: 
    objs = (json.loads(line).popitem() for line in data_file) 
    data = {key: value['score'] for key, value in objs} 

print(data) # -> {'Yet_another_one_': '5.7', 'Another_one': '9.8', 'Some_key': '3.46'}