Python을 JSONL로 변환
표준 JSON 개체를 각 행에 개별적이고 자체 포함된 유효한 JSON 개체를 포함해야 하는 개체로 조작하려고 합니다.'JSON 회선' 참조
JSON_file =
[{u'index': 1,
u'no': 'A',
u'met': u'1043205'},
{u'index': 2,
u'no': 'B',
u'met': u'000031043206'},
{u'index': 3,
u'no': 'C',
u'met': u'0031043207'}]
To JSONL
:
{u'index': 1, u'no': 'A', u'met': u'1043205'}
{u'index': 2, u'no': 'B', u'met': u'031043206'}
{u'index': 3, u'no': 'C', u'met': u'0031043207'}
현재 솔루션은 JSON 파일을 텍스트 파일로 읽고[
처음부터 끝까지]
마지막부터.따라서 행을 포함하는 중첩 객체가 아니라 각 행에 유효한 JSON 객체를 작성합니다.
좀 더 우아한 해결책은 없을까?파일에 문자열 조작을 하면 뭔가 잘못될 수 있을 것 같아요.
그 동기는 책을 읽는 것이다.json
파일을 Spark의 RDD에 저장합니다.관련 질문 - Apache Spark로 JSON 읽기 - 'corrupt_record' 참조
입력한 내용은 일련의 Python 개체로 보입니다. JSON 문서가 아닙니다.
Python 딕셔너리 목록이 있는 경우 각 엔트리를 파일에 따로 덤프한 후 줄바꿈만 하면 됩니다.
import json
with open('output.jsonl', 'w') as outfile:
for entry in JSON_file:
json.dump(entry, outfile)
outfile.write('\n')
의 디폴트 설정json
모듈은 줄 바꿈 없이 JSON을 출력합니다.
고객님의A
,B
그리고.C
이름은 실제로 다음과 같은 문자열입니다.
{"index": 1, "met": "1043205", "no": "A"}
{"index": 2, "met": "000031043206", "no": "B"}
{"index": 3, "met": "0031043207", "no": "C"}
엔트리의 리스트를 포함한 JSON 문서로 시작한 경우는, 다음의 순서로 그 문서를 해석해 주세요.json.load()
/json.loads()
.
jsonlines 패키지는 사용 사례에 맞게 제작되었습니다.
import jsonlines
items = [
{'a': 1, 'b': 2},
{'a', 123, 'b': 456},
]
with jsonlines.open('output.jsonl', 'w') as writer:
writer.write_all(items)
(네, 당신이 처음 질문을 올린 지 몇 년이 지난 후에 썼어요.)
이를 위한 간단한 방법은jq
명령어를 입력합니다.
인스톨 하려면jq
Debian 및 파생상품:
$ sudo apt-get install jq
CentOS/RHEL 사용자는 다음을 수행해야 합니다.
$ sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ sudo yum install jq -y
기본 사용:
$ jq -c '.[]' some_json.json >> output.jsonl
대용량 파일을 취급해야 하는 경우--stream
깃발. 이렇게 하면jq
스트리밍 모드에서 json을 구문 분석합니다.
$ jq -c --stream '.[]' some_json.json >> output.json
그러나 이 작업을 python 파일로 수행해야 하는 경우bigjson
스트리밍 모드에서 JSON을 해석하는 편리한 라이브러리:
$ pip3 install bigjson
대용량 json을 읽는 방법(내 경우 40GB)
import bigjson
# Reads json file in streaming mode
with open('input_file.json', 'rb') as f:
json_data = bigjson.load(f)
# Open output file
with open('output_file.jsonl', 'w') as outfile:
# Iterates over input json
for data in json_data:
# Converts json to a Python dict
dict_data = data.to_python()
# Saves the output to output file
outfile.write(json.dumps(dict_data)+"\n")
필요에 따라서, 퍼포먼스를 향상시키기 위해서, 이 코드를 병행해 주세요.결과를 여기에 투고합니다. : )
문서 및 소스 코드:https://github.com/henu/bigjson
라이브러리를 원하지 않으면 json을 직접 사용할 수 있습니다.
원천
[
{"index": 1,"no": "A","met": "1043205"},
{"index": 2,"no": "B","met": "000031043206"},
{"index": 3,"no": "C","met": "0031043207"}
]
코드
import json
with open("test.json", 'r') as infile:
data = json.load(infile)
if len(data) > 0:
print(json.dumps([t for t in data[0]]))
for record in data:
print(json.dumps([v for (k,v) in record.items()]))
결과
["index", "no", "met"]
[1, "A", "1043205"]
[2, "B", "000031043206"]
[3, "C", "0031043207"]
jsonl은 압축된 json입니다.공백 없이 구분 기호를 전달해야 할 수 있습니다.
with open(output_file_jsonl, 'a', encoding ='utf8') as json_file:
for elem in rs:
json_file.write(json.dumps(dict(elem), separators=(',', ':'), cls=DateTimeEncoder))
json_file.write('\n')
이것은 JSONL 파일에 특수 기호가 있거나 다른 알파벳을 사용할 가능성을 고려한 이 답변의 편집입니다.예를 들어, 나는 키릴 문자를 사용하고 키릴 문자를 사용하지 않는다.encoding
★★★★★★★★★★★★★★★★★」ensure_ascii
파라미터가 편집되면 정말 나쁜 결과가 나옵니다.도움이 될 것 같아서요
with open('output.jsonl', 'w', encoding='utf8') as outfile:
for entry in dataset_donut:
json.dump(entry, outfile, ensure_ascii=False)
outfile.write('\n')
언급URL : https://stackoverflow.com/questions/38915183/python-conversion-from-json-to-jsonl
'programing' 카테고리의 다른 글
ios Swift에서 JSON을 문자열로 변환하는 방법 (0) | 2023.03.18 |
---|---|
drag'n'drop dataTransfer.getData가 비어 있습니다. (0) | 2023.03.18 |
Java에서 여러 JSONObject를 병합(참조) (0) | 2023.03.18 |
이 멀웨어 코드의 목적은 무엇입니까? (0) | 2023.03.18 |
여러 워드프레스 사용자 지정 필드 값을 정렬하려면 어떻게 해야 합니까? (0) | 2023.03.18 |