/ / TypeError: wskaźniki łańcuchowe muszą być liczbami całkowitymi, a nie str // Próba uzyskania wartości klucza - python

TypeError: wskaźniki łańcuchowe muszą być liczbami całkowitymi, a nie str // Próba uzyskania wartości klucza - python

Próbuję uzyskać klucz od wartości, z którą jestem zwrócony, ale gdy używam prostego podejścia, aby uzyskać wartość określonego klucza, otrzymuję błąd: TypeError: wskaźniki łańcuchowe muszą być liczbami całkowitymi, a nie str

Próbowałem też metody .get (), ale też nie działało. Czy ktoś mógłby mi wskazać, co robię źle?

>>> import urllib2
>>> url = "http://192.168.250.1/ajax.app?SessionId=8ef05397-ef00-451a-bc1c-c0d61
5a4811d&service=getDp&plantItemId=1413"
>>> response = urllib2.urlopen(url)
>>> dict = response.read()
>>> dict
"{"service":"getDp","plantItemId":"1413","value":" 21.4","unit":"xc2xb0C"}"
>>> dict["value"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: string indices must be integers, not str

Odpowiedzi:

5 dla odpowiedzi № 1

Wygląda na to, że "dict" to zmienna typu string, a nie słownik. Powinieneś przetworzyć ciąg znaków w odpowiednim formacie słownika (np. JSON). Oto kod, który rozwiąże ten problem:

import json
json_string = response.read()
dict = json.loads(json_string)

Teraz, dla dict["value"] dostaniesz to, czego potrzebujesz.


4 dla odpowiedzi nr 2

response.read() zwraca obiekt typu string a nie słownik i możesz indeksować ciąg znaków używając tylko liczb całkowitych, a więc otrzymujesz swój błąd.

Musisz przeanalizować ten ciąg i przekształcić go w słownik. Aby przekonwertować ciąg słownika z powrotem na słownik, możesz to zrobić:

import ast
dict = ast.literal_eval(dict)
print dict["value"]

Próbowałem go na moim komputerze za pomocą Pythona 2.7 i działa.