2013-08-14 8 views
6

chcę pokazać zawartość obiektu przy użyciu następującego kodu:TypeError: Oczekuje ciąg lub bufor w Pythonie Google App Engine za

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']))) 

ale błąd

TypeError: expected string or buffer

pojawia się w wyniku linia:

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

lub

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

UPDATE (fix):

musiałem przekonwertować z ciągu znaków do obiektu JSON:

# 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

Nie jest jasne, gdzie leży problem, jeśli odpowiedź Felipe Hoffa nie zadziałała. Czy możesz wyjaśnić, co próbowałeś, a co nie, z jego odpowiedzi? – Nick

Odpowiedz

0

Wszystko czego potrzebuję, to przekonwertować z ciągów do obiektu JSON, co ilustruje poniższy kod:

# 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'] 

te linie już zrobił json.load i ekstrahuje "dane" i "tłumaczenia". Wtedy zamiast:

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

należy:

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

Przepraszamy, nie rozwiązany. Sprawdź to jeszcze raz :) –

0

W urllib2.urlopen Funkcja zwraca obiekt podobny do pliku, a nie ciąg. Powinieneś najpierw przeczytać odpowiedź.

url = "http://www.example.com/data" 
f = urllib2.urlopen(url) 
data = f.read() 
print json.loads(data)