2012-09-10 9 views
5

Ich bin über meinen Kopf, versuchen, JSON für mein erstes Mal zu analysieren und mit einem multidimensionalen Array zu behandeln.Parsen mutiti dimensionale JSON-Array zu Python

{ 
    "secret": "[Hidden]", 
    "minutes": 20, 
    "link": "http:\/\/www.1.com", 
    "bookmark_collection": { 
    "free_link": { 
     "name": "#free_link#", 
     "bookmarks": [ 
     { 
      "name": "1", 
      "link": "http:\/\/www.1.com" 
     }, 
     { 
      "name": "2", 
      "link": "http:\/\/2.dk" 
     }, 
     { 
      "name": "3", 
      "link": "http:\/\/www.3.in" 
     } 
     ] 
    }, 
    "boarding_pass": { 
     "name": "Boarding Pass", 
     "bookmarks": [ 
     { 
      "name": "1", 
      "link": "http:\/\/www.1.com\/" 
     }, 
     { 
      "name": "2", 
      "link": "http:\/\/www.2.com\/" 
     }, 
     { 
      "name": "3", 
      "link": "http:\/\/www.3.hk" 
     } 
     ] 
    }, 
    "sublinks": { 
     "name": "sublinks", 
     "link": [ 
     "http:\/\/www.1.com", 
     "http:\/\/www.2.com", 
     "http:\/\/www.3.com" 
     ] 
    } 
    } 
} 

als separate Strings die statischen Daten auf meiner ersten Dimension (Geheimnis, Minuten, Link), die ich Dieser ist in 3 Teile geteilt, erhalten müssen.

Dann brauche ich ein Wörterbuch pro "Lesezeichen Sammlung", die keine festen Namen hat, also brauche ich den Namen von ihnen und die Links/Namen von jedem Lesezeichen.

Dann gibt es die separaten Sublinks, die immer gleich sind, wo ich alle Links in einem separaten Wörterbuch brauche.

Ich lese über Parsing JSON, aber die meisten Sachen, die ich finde, ist ein einfaches Array in 1 Wörterbuch. Hat jemand irgendwelche gute Techniken, dies zu tun?

+0

http://docs.python.org/tutorial/datastructures.html –

+0

Ich glaube nicht, dass Sie das Wort "Array" hier richtig verwenden. Unter Array verstehe ich "die meisten Menschen" eine - möglicherweise mehrdimensionale - Datenstruktur, die aus Elementen des gleichen Typs besteht. JSON und ihr Python-Counterpart "beliebig verschachtelte Diktate und Listen" sind normalerweise keine Arrays, sondern "Objekte", das ist der springende Punkt: etwas, um eine willkürliche Struktur beliebiger Objekte zu "halten" (Objekte müssen von json-serialisierbaren Typen sein)). – heltonbiker

+0

ja, das könnte auch der Grund sein, warum mein Googeln kläglich gescheitert ist. –

Antwort

11

Nachdem Sie den JSON analysiert haben, erhalten Sie ein Python-Diktat. So nehme an, die oben JSON ist in einer Zeichenfolge mit dem Namen INPUT_DATA:

import json 
# This converts from JSON to a python dict 
parsed_input = json.loads(input_data) 

# Now, all of your static variables are referenceable as keys: 
secret = parsed_input['secret'] 
minutes = parsed_input['minutes'] 
link = parsed_input['link'] 

# Plus, you can get your bookmark collection as: 
bookmark_collection = parsed_input['bookmark_collection'] 

# Print a list of names of the bookmark collections... 
print bookmark_collection.keys() # Note this contains sublinks, so remove it if needed 

# Get the name of the Boarding Pass bookmark: 
print bookmark_collection['boarding_pass']['name'] 

# Print out a list of all bookmark links as: 
# Boarding Pass 
# * 1: http://www.1.com/ 
# * 2: http://www.2.com/ 
# ... 
for bookmark_definition in bookmark_collection.values(): 
    # Skip sublinks... 
    if bookmark_definition['name'] == 'sublinks': 
     continue 
    print bookmark_definition['name'] 
    for bookmark in bookmark_definition['bookmarks']: 
     print " * %(name)s: %(link)s" % bookmark 

# Get the sublink definition: 
sublinks = parsed_input['bookmark_collection']['sublinks'] 

# .. and print them 
print sublinks['name'] 
for link in sublinks['link']: 
    print ' *', link 
+0

Was an JSON bemerkenswert ist, ist, dass seine Syntax GENAU dieselbe ist, die man verwendet, um das gleiche in Python zu erschaffen, wobei "Ding" als beliebig verschachtelte Dicts und Listen betrachtet wird . – heltonbiker

+0

@heltonbiker: [Außer den Ausnahmen] (http://stackoverflow.com/questions/6627635/is-json-syntax-a-strict-subset-of-python-syntax), natürlich. –

+0

wauv, du hast mich sofort verstanden, wie alles funktioniert. Danke! Warum ist das so schwer zu finden ein Beispiel für im Netz ... –

0

Hmm, nicht json.loads der Trick?

Zum Beispiel, wenn Sie Ihre Daten in einer Datei ist,

import json 
text = open('/tmp/mydata.json').read() 

d = json.loads(text) 

# first level fields 
print d['minutes'] # or 'secret' or 'link' 

# the names of each of bookmark_collections's items 
print d['bookmark_collection'].keys() 

# the sublinks section, as a dict 
print d['bookmark_collection']['sublinks'] 

Der Ausgang dieses Codes (Ihr Abtastwerteingang oben) ist:

20 
[u'sublinks', u'free_link', u'boarding_pass'] 
{u'link': [u'http://www.1.com', u'http://www.2.com', u'http://www.3.com'], u'name': u'sublinks'} 

Was, glaube ich, bekommt man was du brauchst?