키가 존재하는지 확인하고 Python을 사용하여 JSON 어레이를 반복합니다.
다음과 같은 Facebook 투고로부터 많은 JSON 데이터를 받았습니다.
{"from": {"id": "8", "name": "Mary Pinter"}, "message": "How ARE you?", "comments": {"count": 0}, "updated_time": "2012-05-01", "created_time": "2012-05-01", "to": {"data": [{"id": "1543", "name": "Honey Pinter"}]}, "type": "status", "id": "id_7"}
JSON 데이터는 반구조화되어 있으며 모든 것이 동일하지는 않습니다.다음은 내 코드입니다.
import json
str = '{"from": {"id": "8", "name": "Mary Pinter"}, "message": "How ARE you?", "comments": {"count": 0}, "updated_time": "2012-05-01", "created_time": "2012-05-01", "to": {"data": [{"id": "1543", "name": "Honey Pinter"}]}, "type": "status", "id": "id_7"}'
data = json.loads(str)
post_id = data['id']
post_type = data['type']
print(post_id)
print(post_type)
created_time = data['created_time']
updated_time = data['updated_time']
print(created_time)
print(updated_time)
if data.get('application'):
app_id = data['application'].get('id', 0)
print(app_id)
else:
print('null')
#if data.get('to'):
#... This is the part I am not sure how to do
# Since it is in the form "to": {"data":[{"id":...}]}
to_id를 1543으로 출력하고 그렇지 않으면 'null'로 출력합니다.
어떻게 해야 할지 모르겠어요.
import json
jsonData = """{"from": {"id": "8", "name": "Mary Pinter"}, "message": "How ARE you?", "comments": {"count": 0}, "updated_time": "2012-05-01", "created_time": "2012-05-01", "to": {"data": [{"id": "1543", "name": "Honey Pinter"}]}, "type": "status", "id": "id_7"}"""
def getTargetIds(jsonData):
data = json.loads(jsonData)
if 'to' not in data:
raise ValueError("No target in given data")
if 'data' not in data['to']:
raise ValueError("No data for target")
for dest in data['to']['data']:
if 'id' not in dest:
continue
targetId = dest['id']
print("to_id:", targetId)
출력:
In [9]: getTargetIds(s)
to_id: 1543
키가 존재하는지 확인하는 것만을 원하는 경우
h = {'a': 1}
'b' in h # returns False
key 값이 있는지 확인하고 싶은 경우
h.get('b') # returns None
실제 값이 누락된 경우 기본값 반환
h.get('b', 'Default value')
속성 검증의 로직을 변경해야 할 때마다 한 곳에 배치되어 팔로워가 코드를 읽을 수 있도록 도우미 유틸리티 메서드를 작성하는 것이 좋습니다.
예를 들어 도우미 메서드(또는 클래스)를 만듭니다.JsonUtils
스태틱 메서드)를 사용하여json_utils.py
:
def get_attribute(data, attribute, default_value):
return data.get(attribute) or default_value
프로젝트에 사용할 수 있습니다.
from json_utils import get_attribute
def my_cool_iteration_func(data):
data_to = get_attribute(data, 'to', None)
if not data_to:
return
data_to_data = get_attribute(data_to, 'data', [])
for item in data_to_data:
print('The id is: %s' % get_attribute(item, 'id', 'null'))
중요사항:
내가 사용하는 이유가 있다.data.get(attribute) or default_value
단순한 것이 아니라data.get(attribute, default_value)
:
{'my_key': None}.get('my_key', 'nothing') # returns None
{'my_key': None}.get('my_key') or 'nothing' # returns 'nothing'
응용 프로그램에서 값이 null인 속성을 얻는 것은 속성을 전혀 가져오지 않는 것과 같습니다.용도가 다른 경우는, 이것을 변경할 필요가 있습니다.
if "my_data" in my_json_data:
print json.dumps(my_json_data["my_data"])
이 목적을 위해 작은 함수를 작성했습니다.용도를 자유롭게 바꾸세요.
def is_json_key_present(json, key):
try:
buf = json[key]
except KeyError:
return False
return True
jsonData = """{"from": {"id": "8", "name": "Mary Pinter"}, "message": "How ARE you?", "comments": {"count": 0}, "updated_time": "2012-05-01", "created_time": "2012-05-01", "to": {"data": [{"id": "1543", "name": "Honey Pinter"}, {"name": "Joe Schmoe"}]}, "type": "status", "id": "id_7"}"""
def getTargetIds(jsonData):
data = json.loads(jsonData)
for dest in data['to']['data']:
print("to_id:", dest.get('id', 'null'))
시험해 보세요:
>>> getTargetIds(jsonData)
to_id: 1543
to_id: null
또는 누락된 ID 값을 인쇄하는 대신 건너뛸 경우'null'
:
def getTargetIds(jsonData):
data = json.loads(jsonData)
for dest in data['to']['data']:
if 'id' in to_id:
print("to_id:", dest['id'])
그래서:
>>> getTargetIds(jsonData)
to_id: 1543
물론 실생활에서 여러분은 아마 원하지 않을 것이다.print
각 아이디를 저장해서 뭔가 해야 하는데 그건 또 다른 문제예요
try-except를 사용할 수 있습니다.
try:
print(str.to.id)
except AttributeError: # Not a Retweet
print('null')
언급URL : https://stackoverflow.com/questions/24898797/check-if-key-exists-and-iterate-the-json-array-using-python
'programing' 카테고리의 다른 글
react.js와 Ajax의 차이점 (0) | 2023.04.03 |
---|---|
AngularJS : jQuery로 변경 시 ng-model 바인딩이 업데이트되지 않음 (0) | 2023.04.03 |
WooCommerce 주문에서 고객 정보를 얻으려면 어떻게 해야 합니까? (0) | 2023.04.03 |
유튜브 동영상을 웅장한 팝업창에 삽입하는 방법은? (0) | 2023.04.03 |
WordPress Plugin 옵션 기본값을 설정하려면 어떻게 해야 합니까? (0) | 2023.04.03 |