Open Refine을 사용하여 지저분한 JSON 문자열 (40k 라인)의 데이터 세트를 분석하려고했으나 JSON의 순서가 지정되지 않았기 때문에, JSON 객체 라인 중 일부는 리턴되어 파일로 기록 될 때 혼란스러워졌습니다.엄격한 JSON 소비, Reorder를위한 특정 JSON 스키마의 값 재 배열 방법
일부 개체의 키가 누락되어 일부 개체의 순서가 잘못되었습니다. 예 :
1 {"about":"foo", "category":"bar", "id":"123", "cat_list": ["category1":"foo2"]}
2 {"id":"22","about":"barFoo", "category":"NotABar"}
3 {"about":"barbar", "category":"website", "id":"3333", "cat_list": ["category1":"foo22"]}
....
....
....
40,000 {"about":"bar123", "category":"publish", "id":"3323", "cat_list": ""}
문제 :
열기 조정에 데이터를 가져 오기, 프로그램은 파일을 읽을 때와 비교하기 위해 특정 스키마를 요청합니다. 그런 다음 제공된 파일을 읽고 행의 각 JSON 객체를 스키마와 비교하고 스키마와 얼마나 잘 일치하는지에 따라 가져 오기 또는 삭제합니다! 결과적으로 많은 항목이 빠져 있습니다!
이상적 :
파이썬을 사용하여, 내가 지정한 특정 스키마에 JSON 객체의 순서를 변경하고 싶습니다.
예 :
1 {"about": ....
2 {"about": ....
3 {"about": ....
....
....
....
40,000 {"about": ....
내가 : 다음 JSON과 키 - 값의 각 라인을 재 배열
{"about":"", "category":"", "id":"", "cat_list": ""}
이 특정 형식에있을
지정된 스키마 내가 어떻게 효율적으로이 일을 할 수 있는지 완전히 모르겠다.
편집 :
나는 이것을 구성하기위한 스크립트를 작성하기로 결정했습니다. 나는 복잡한 필드의 일부를 제거하고 전체 .JSON 파일이 : 아직
{"name":"Carstar Bridgewater",
"category":"Automotive",
"about":"We are Bridgewaters largest professional collision centre and are committed to being there for customer cars and communities when they need us.",
"country":"Canada",
"state":"NS",
"city":"Bridgewater
"},
{"name":"Febreze",
"category":"Product/Service
",
"about":"Freshness that eliminates odorsso you can breathe happy.",
"country":"Added Nothing",
"state":"Added Nothing",
"city":"Added Nothing"},
{"name":"Custom Wood & Acrylic Turnings",
"category":"Professional Services",
"about":"Hand crafted item turned on a wood lath pen pencil bottle stopper cork screw bottle opener perfume applicator or other custom turnings",
"country":"Canada",
"state":"NS
",
"city":"Middle Sackville"},
{"name":"The Hunger Games",
"category":"Movie
",
"about":"THE HUNGER GAMES: MOCKINGJAY - PART 1 - In theatres November 2 2014. www.hungergamesmovie.ca",
"country":"Added Nothing",
"state":"Added Nothing",
"city":"Added Nothing"},
합니다. Google-Refine은 여전히 내 파일을 수락하지 않습니까? 내가 잘못하고있는 것은 무엇입니까?
객체는 JSON에 어떤 고유의 순서가 없습니다 만 배열은 않습니다. – Barmar
'cat_list' 값이 유효한 JSON이 아닙니다. 배열은'key : value' 쌍을 포함 할 수 없습니다. 그리고 40,000 줄에서이 값은 배열이 아닌 문자열이며 스키마에 위배됩니다. 당신이 가지고있는 문제는이 문제와 관련이 있다고 생각합니다. 객체의 요소의 순서가 아닙니다. – Barmar
@Barmar가 말했듯이 문제가 관련되지 않을 수도 있습니다. ... 평범한 'json'모듈을 사용하는 경우 dict.items()/dict.iteritems()가 제공하는 순서대로 키를 정렬하기 만하면 정렬하지 않아도됩니다. 삽입 순서를 '기억'하는 collections.OrderedDict를 사용하거나 원하는 순서대로 키를 반환하는 dict 래퍼를 만들 수 있습니다. – Wuggy