JSON 개체에서 값을 삭제하려고 하면 "유니코드 개체는 항목 삭제를 지원하지 않습니다"라는 오류가 나타나는 이유는 무엇입니까?
각 객체에서 요소를 삭제하는 객체 목록을 루프하려고 합니다.각 오브젝트는 새로운 행입니다.그런 다음 오브젝트에 포함된 요소를 제외하고 새 파일을 그대로 저장하려고 합니다.
{
"business_id": "fNGIbpazjTRdXgwRY_NIXA",
"full_address": "1201 Washington Ave\nCarnegie, PA 15106",
"hours": {
"Monday": {
"close": "23:00",
"open": "11:00"
},
"Tuesday": {
"close": "23:00",
"open": "11:00"
},
"Friday": {
"close": "23:00",
"open": "11:00"
},
"Wednesday": {
"close": "23:00",
"open": "11:00"
},
"Thursday": {
"close": "23:00",
"open": "11:00"
},
"Saturday": {
"close": "23:00",
"open": "11:00"
}
},
"open": true,
"categories": ["Bars", "American (Traditional)", "Nightlife", "Lounges", "Restaurants"],
"city": "Carnegie",
"review_count": 7,
"name": "Rocky's Lounge",
"neighborhoods": [],
"longitude": -80.0849416,
"state": "PA",
"stars": 4.0,
"latitude": 40.3964688,
"attributes": {
"Alcohol": "full_bar",
"Noise Level": "average",
"Music": {
"dj": false
},
"Attire": "casual",
"Ambience": {
"romantic": false,
"intimate": false,
"touristy": false,
"hipster": false,
"divey": false,
"classy": false,
"trendy": false,
"upscale": false,
"casual": false
},
"Good for Kids": true,
"Wheelchair Accessible": true,
"Good For Dancing": false,
"Delivery": false,
"Dogs Allowed": false,
"Coat Check": false,
"Smoking": "no",
"Accepts Credit Cards": true,
"Take-out": true,
"Price Range": 1,
"Outdoor Seating": false,
"Takes Reservations": false,
"Waiter Service": true,
"Wi-Fi": "free",
"Caters": false,
"Good For": {
"dessert": false,
"latenight": false,
"lunch": false,
"dinner": false,
"brunch": false,
"breakfast": false
},
"Parking": {
"garage": false,
"street": false,
"validated": false,
"lot": true,
"valet": false
},
"Has TV": true,
"Good For Groups": true
},
"type": "business"
}
시간 요소 내에 포함된 정보를 제거해야 하지만 항상 동일한 정보는 아닙니다.일부에는 모든 요일이 포함되어 있고 일부에는 하루 또는 이틀의 정보만 포함되어 있습니다.
제가 시도한 코드는 다음과 같습니다.
import json
with open('data.json') as data_file:
data = json.load(data_file)
for element in data:
del element['hours']
다만, 코드 실행시에 에러가 표시됩니다.
TypeError: '유니코드' 개체가 항목 삭제를 지원하지 않습니다.
같은 파일을 덮어쓰려고 합니다.
import json
with open('data.json', 'r') as data_file:
data = json.load(data_file)
for element in data:
element.pop('hours', None)
with open('data.json', 'w') as data_file:
data = json.dump(data, data_file)
dict.pop(<key>, not_found=None)
제가 당신의 요구를 이해했다면 아마 당신이 찾고 있는 것이겠죠.이 기능을 사용하면hours
키가 있으면 키를 누르고 키가 없으면 실패하지 않습니다.
다만, 키/값 쌍 전체를 삭제하고 싶을 뿐이므로, 시간 키에 일수가 포함되어 있는지 여부에 관계없이, 왜 다른지 이해할 수 없습니다.
이제, 만약 당신이 정말로 그것을 사용하고 싶다면del
대신pop
코드를 동작시키는 방법은 다음과 같습니다.
import json
with open('data.json') as data_file:
data = json.load(data_file)
for element in data:
if 'hours' in element:
del element['hours']
with open('data.json', 'w') as data_file:
data = json.dump(data, data_file)
다른 파일에 쓰려면 두 번째 파일에서 파일 이름을 변경하기만 하면 됩니다.open
진술.
데이터 정리 단계에서 파일을 닫고 마지막에 덮어쓸 수 있도록 들여쓰기를 변경해야 했습니다.
with
는 컨텍스트 매니저라고 불리는 것으로, 여기서 data_file 파일 기술자(descriptor)가 제공하는 것은 그 컨텍스트 내에서만 사용할 수 있습니다.그 말은, 그 안에 들어가자마자with
block ends, 파일이 닫히고 컨텍스트가 종료되며 파일 기술자가 비활성화/비활성화됩니다.
이렇게 하지 않으면 파일을 쓰기 모드로 열 수 없고 쓸 새 파일 설명자를 얻을 수 없습니다.
언급URL : https://stackoverflow.com/questions/36606930/why-do-i-get-an-error-unicode-object-does-not-support-item-deletion-when-try
'sourcecode' 카테고리의 다른 글
mongodb 클라이언트를 로컬 Meteor MongoDB에 연결하는 방법 (0) | 2023.03.09 |
---|---|
플라스크에 있는 에이잭스에서 올라온 데이터를 어떻게 사용할 수 있나요? (0) | 2023.03.09 |
유성 전개 앱에서 데이터를 쉽게 내보낼 수 있는 방법이 있나요? (0) | 2023.03.09 |
발신기지 'Authorization' 헤더와 jquery.ajax()의 교차 발신 (0) | 2023.03.09 |
ASP.net MVC에서 JSONP 반환 (0) | 2023.03.09 |