문제는 당신이 JSON 파일을 만드는 방법입니다. 각 행에 json.dump()
을 사용하고 JSON 파일에 추가하지 않으려 고합니다.
JSON 파일을 만들려면 먼저 원하는 방식으로 전체 파일을 나타내는 Python으로 데이터 구조를 만든 다음 json.dump()
을 한 번만 호출하여 전체 구조를 JSON 형식으로 덤프해야합니다.
전체 파일에 대해 하나의 json.dump()
호출을 작성하면 그것이 유효한 JSON이됩니다.
목록/행 배열을 dict/object 안에 배치하여 단일 행이 아닌 전체 JSON 파일과 관련된 다른 속성을 배치 할 것을 권장합니다. 그것은 당신의 facebook.csv 행의 첫 번째 부부처럼 보이는
는 (따옴표 유무에 관계없이)이 같은 있습니다 :
"US State","12 month increase %","24 month increase %","Number of Facebook UsersJuly 2010","Number of Facebook usersJuly 2008","Number of Facebook UsersJuly 2009"
"Alabama","109.3%","400.7%","1,452,300","290,060","694,020"
의 우리가 여기 들여 그에서이 JSON 파일을 (생성 할 가정 해 봅시다) 명확성을 위해 다음 JSON 파일의 최상위 오브젝트 (되지 배열)이며,이 목적은 열의 배열 인 rows
속성을 가지고
{
"rows": [
{
"USState": "US State",
"12MI%": "Number of Facebook usersJuly 2008",
"24MI%": "Number of Facebook UsersJuly 2009",
"NOFU2010": "Number of Facebook UsersJuly 2010",
"NOFU2008": "12 month increase %",
"NOFU2009": "24 month increase %"
},
{
"USState": "Alabama",
"12MI%": "290,060",
"24MI%": "694,020",
"NOFU2010": "1,452,300",
"NOFU2008": "109.3%",
"NOFU2009": "400.7%"
}
]
}
참고.
우리는이 JSON 파일을 생성하고이 파이썬 코드를 테스트 할 수
import csv
import json
# Read the CSV file and convert it to a list of dicts
with open('facebook.csv', 'rb') as csvfile:
fieldnames = (
"USState", "NOFU2008", "NOFU2009", "NOFU2010",
"12MI%", "24MI%"
)
reader = csv.DictReader(csvfile, fieldnames)
rows = list(reader)
# Wrap the list inside an outer dict
wrap = {
'rows': rows
}
# Format and write the entire JSON in one fell swoop
with open('file.json', 'wb') as jsonfile:
json.dump(wrap, jsonfile)
# Now test the file by reading it and parsing it
with open('file.json', 'rb') as jsonfile:
data = json.load(jsonfile)
# For fun, convert the data back to JSON again and pretty-print it
print json.dumps(data, indent=4)
몇 가지 참고 사항은 ...이 코드는 중첩 된 독자가 원본과 루프가 없습니다. 나는 그게 무엇인지 모르겠다. 독자 한 명이 충분해야합니다.
사실이 버전은 루프를 전혀 사용하지 않습니다. 이 라인은 독자 객체에서 행의 목록을 생성합니다 :
rows = list(reader)
는 또한 CSV 및 JSON 파일이 열립니다 with
의 사용을 사용하도록주의를 지불해야합니다. 이는 파일이 with
블록의 끝에 자동으로 닫히기 때문에 파일을 여는 좋은 방법입니다.
지금이 모든 것을 말하면서,이 정확한 JSON 구조가 정말로 원하는 것인지 궁금해해야합니다. CSV의 첫 번째 행이 헤더 행 인 것처럼 보이므로 해당 행을 건너 뛰어도됩니까?당신은 목록에 CSV 데이터의 나머지 부분을 변환하기 전에 reader.next()
호출을 추가하여 쉽게 그렇게 할 수 있습니다
reader.next()
rows = list(reader)
또한 나는 당신이 결과 데이터에 액세스하는 방법을 이해 모르겠어요.
USState
은 각 행 개체의 속성이므로
data["USState"]
을 사용할 수 없습니다. 데이터에 액세스하려는 방법에 대해 조금 더 설명하고 정리할 수 있습니다.
JSON 형식이 정확한 방식입니까? 유효하지 않은 JSON입니다. 그것은 배열에 있어야합니다. – Shadaez
@Shadaez - 네, 그냥이 질문에 JSON 파일의 처음 두 줄을 붙여 넣습니다. JSON 파일을 만들 때 오류가 발생한다는 의미입니까? CSV 파일에서 내용을 추출하고 루프에 대해 JSON 파일을 만듭니다. – newbie
그래, 처음 행을 쓸 때마다 '['다음에 새 행 앞에 ','를 추가하십시오. 마지막 행을 제외하고 여기서 ']'를 추가하십시오. 배열의 각 값을 읽을 수도 있습니다.'for line in data'' data [ "USState"]' – Shadaez