2013-08-14 12 views
6

ich den Inhalt eines Objekts mit dem folgenden Code angezeigt werden soll:Typeerror: erwartetes String oder Puffer in Google App Engine Python

def get(self): 
    url="https://www.googleapis.com/language/translate/v2?key=MY-BILLING-KEY&q=hello&source=en&target=ja" 
    data = urllib2.urlopen(url) 
    parse_data = json.load(data) 
    parsed_data = parse_data['data']['translations'] 

    // This command is ok 
    self.response.out.write("<br>") 

    // This command shows above error 
    self.response.out.write(str(json.loads(parsed_data[u'data'][u'translations'][u'translatedText']))) 

aber den Fehler

TypeError: expected string or buffer

als Ergebnis erscheint die die Zeile:

self.response.out.write(str(json.loads(parsed_data[u'data'][u'translations'][u'translatedText']))) 

oder


UPDATE (fix):

Ich brauchte von Saite zu JSON-Objekt zu konvertieren:

# Convert to String 
    parsed_data = json.dumps(parsed_data) 

    # Convert to JSON Object 
    json_object = json.loads(parsed_data) 

    # Parse JSON Object 
    translatedObject = json_object[0]['translatedText'] 

    # Output to page, by using HTML 
    self.response.out.write(translatedObject) 
+0

Es ist unklar, wo dein Problem liegt, wenn die Antwort von Felipe Hoffa nicht funktioniert hat. Kannst du erklären, was du versucht hast und was nicht, aus seiner Antwort? – Nick

Antwort

0

Alles was ich brauche, ist von String zu JSON-Objekt konvertieren, wie dem folgenden Code:

# Convert to String 
parsed_data = json.dumps(parsed_data) 

# Convert to JSON Object 
json_object = json.loads(parsed_data) 

# Parse JSON Object 
translatedObject = json_object[0]['translatedText'] 

# Output to page, by using HTML 
self.response.out.write(translatedObject) 
2
parse_data = json.load(data) 
parsed_data = parse_data['data']['translations'] 

Diese Linien bereits taten die json.load und extrahiert "Daten" und "Übersetzungen". Dann statt:

self.response.out.write(str(
    json.loads(parsed_data)[u'data'][u'translations'][u'translatedText'])) 

sollten Sie:

self.response.out.write(str(
    parsed_data[u'translatedText'])) 
+0

Entschuldigung, nicht gelöst. Bitte überprüfen Sie es noch einmal :) –

0

Die urllib2.urlopen Funktion gibt ein dateiähnliches Objekt zurück, keine Zeichenfolge. Sie sollten die Antwort zuerst lesen.

Verwandte Themen