Я читаю JSON с URL-адреса и сталкиваюсь с некоторыми проблемами при манипулировании данными.
JSON выглядит следующим образом:
{
"Id": "1234,
"something": "{..."
}
Я прочитал JSON с URL-адреса следующим образом, и он отлично работает.
response = urllib.urlopen(url)
data = json.loads(response.read())
Теперь я хочу, чтобы каждый раз, когда значение "something" начинается с '{', добавлять "Id" к списку. Вот что у меня есть:
for x in data:
if x.get("something").startswith('{'):
do something...
Я получаю следующую ошибку:
if x.get("something").startswith('{'):
AttributeError: 'NoneType' object has no attribute 'startswith'
В любом случае я могу заставить это работать или другие предложения о том, как это сделать?
@DyZ Спасибо, вот и все.






Ты на правильном пути..
Сначала вам нужно убедиться, что «что-то» существует, иначе ваш код превратит "None", поэтому вы получаете сообщение об ошибке, вы можете попробовать следующее, чтобы убедиться, что это так:
for key, value in data.items():
if key == "something":
if value.startswith('{'):
# do something...
Я виню свою усталость в этом беспорядке, исправлено.
Думаю, вам понадобится только эта часть:
if data.get("something").startswith("{"):
поскольку это dict, вы можете получить значение dict, вызвав ключ с именем dict. Не нужно зацикливаться.
Пока вы зацикливаете, он будет перебирать ключи. Если вы хотите сделать это по-своему, вы можете сделать вот так:
for x, y in data.items():
if x= = "something" and y.startswith("{"):
do what you want...
good_items = ["""something""" for k in data if k.startswith('{')]
Вместо «что-то» вы можете поместить вызов метода в функцию, принимающую единственный аргумент (отдельный ключ). Это даст список элементов из данных, которым соответствует условие. Надеюсь, это поможет...
data - это словарь, а «что-то» - это ключ в словаре, который присутствует или отсутствует. Следующий код проверяет наличие ключа (затем он извлекает значение, связанное с кодом, и проверяет, начинается ли значение с символа "{"); или нет (тогда он заменяет значение пустой строкой, которая не начинается с "{"):
if data.get("something","").startswith("{"): ...
Если ключ определенно присутствует, решение еще проще:
if data["something"].startswith("{"): ...
Сообщение об ошибке означает, что «чего-то» нет в вашем JSON. Вы должны сначала проверить, есть ли это, и только потом проверять, с чего он начинается. Возможное решение:
x.get("something","").startswith('{')