2017-03-15 3 views
2

Hallo, ich bin wirklich neu in JSON und Python, hier ist mein Dilemma, das mich seit zwei Tagen nervt. Hier ist der Beispiel-JSON, den ich analysieren möchte.JSON mit Python analysieren - Wie man auf tiefe Elemente zugreift

{ 
    "Tag1":"{ 
"TagX": [ 
    { 
    "TagA": "A", 
    "TagB": 1.6, 
    "TagC": 1.4, 
    "TagD": 3.5, 
    "TagE": "01", 
    "TagF": null 
    }, 
    { 
    "TagA": "A", 
    "TagB": 1.6, 
    "TagC": 1.4, 
    "TagD": 3.5, 
    "TagE": "02", 
    "TagF": null 
    } 
], 
"date": "10.03.2017 21:00:00" 
    }" 
} 

Hier ist mein Python-Code:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import requests 
import json 
import urllib2 

jaysonData = json.load(urllib2.urlopen('URL')) 
print jaysonData["Tag1"] 

Wie ich Werte von TagB und TagC bekommen kann? Wenn ich versuche, auf sie zuzugreifen mit

jaysonData = json.load(urllib2.urlopen('URL')) 
print jaysonData["Tag1"]["TagX"]["TagB"] 

Die Ausgabe lautet:

TypeError: string indices must be integers 

Wenn ich dies tun:

print jaysonData["Tag1"] 

Die Ausgabe lautet:

{ 
"TagX": [ 
    { 
    "TagA": "A", 
    "TagB": 1.6, 
    "TagC": 1.4, 
    "TagD": 3.5, 
    "TagE": "01", 
    "TagF": null 
    }, 
    { 
    "TagA": "A", 
    "TagB": 1.6, 
    "TagC": 1.4, 
    "TagD": 3.5, 
    "TagE": "02", 
    "TagF": null 
    } 
], 
"date": "10.03.2017 21:00:00" 
    }" 

I müssen TagX, TagD, Tag erreichen E aber der folgende Code gibt diesen Fehler:

print jaysonData["Tag1"]["TagX"] 

druckt

print jaysonData["Tag1"]["TagX"] 
TypeError: string indices must be integers 

Wie kann ich TagA auf TagF mit Python zugreifen? Vielen Dank im Voraus.

Antwort

1

In dem zurückgegebenen JSON, ist der Wert von Tag1 eine Zeichenfolge, nicht mehr JSON.Es scheint JSON obwohl als String codiert werden, so dass einmal JSon konvertiert mehr:

jaysonData = json.load(urllib2.urlopen('URL')) 
tag1JaysonData = json.load(jaysonData['Tag1']) 
print tag1JaysonData["TagX"] 

Beachten Sie auch, dass TagX eine Liste, kein Wörterbuch, so gibt es mehr TagB s drin:

print [x['TagB'] for x in tag1JaysonData['TagX']] 
+0

Dies ist es! Vielen Dank für Ihre wertvolle Hilfe. – user611811

0

TagX ist ein list bestehend aus 2 Wörterbüchern und TagB ist ein dictionary.

print jaysonData["Tag1"]["TagX"][0]["TagB"] 

Sie müssen doppelte Anführungszeichen vor und nach den geschweiften Klammern von Tag1 entfernen.

{ 
    "Tag1":{ 
"TagX": [ 
    { 
    "TagA": "A", 
    "TagB": 1.6, 
    "TagC": 1.4, 
    "TagD": 3.5, 
    "TagE": "01", 
    "TagF": null 
    }, 
    { 
    "TagA": "A", 
    "TagB": 1.6, 
    "TagC": 1.4, 
    "TagD": 3.5, 
    "TagE": "02", 
    "TagF": null 
    } 
], 
"date": "10.03.2017 21:00:00" 
    } 
} 
+0

Druck jaysonData [ "Tag1"] [ "TAGx"] [0] [ "TagB"] Typeerror: String-Indizes müssen ganze Zahlen sein – user611811

+0

@ user611811 die doppelten Anführungszeichen entfernen auch von Naresh hingewiesen. –

+0

Wie kann ich die doppelten Zitate mit Python entfernen. Diese JSON-Datei ist nicht lokal und ich hole sie jede Minute. Kannst du mir wenigstens den Weg zeigen? – user611811

0
{ 
    "Tag1":{ 
"TagX": [ 
    { 
    "TagA": "A", 
    "TagB": 1.6, 
    "TagC": 1.4, 
    "TagD": 3.5, 
    "TagE": "01", 
    "TagF": null 
    }, 
    { 
    "TagA": "A", 
    "TagB": 1.6, 
    "TagC": 1.4, 
    "TagD": 3.5, 
    "TagE": "02", 
    "TagF": null 
    } 
], 
"date": "10.03.2017 21:00:00" 
    } 
} 

Sie müssen doppelt qoutation vor geschweifte Klammer von Tag1 entfernen. Ich habe oben in Beispiel entfernt.

und Zugang so.

+0

Genau das habe ich mir gedacht. Aber das ist ein Live-JSON-Daten-Feed von einer anderen Quelle. Ich muss diese Echtzeit analysieren. Wie kann ich das in meinem Code nach JaysonData = json.load (urllib2.urlopen ('URL')) entfernen – user611811

+0

Wenn Sie die Antwort nicht ändern können, dann tun Sie erneut res = json.load (jaysonData ["Tag1"]) –

0

Sie müssen überlegen, auf welche Werte Sie zugreifen möchten, z. B. ein Diktat oder eine Liste? Sie greifen immer auf das dict-Element nach Schlüssel zu und listen Element für Index auf.

, um die Anführungszeichen zu entfernen, die Sie tun können, nachdem Sie Daten von der URL gelesen haben.

Verwandte Themen