programing

JSON에 덤프는 추가 큰 따옴표와 따옴표 이스케이프를 추가합니다.

firstcheck 2021. 1. 14. 08:32
반응형

JSON에 덤프는 추가 큰 따옴표와 따옴표 이스케이프를 추가합니다.


Python 도구로 Twitter 데이터를 검색하고 JSON 형식으로 내 디스크에 덤프합니다. 큰 따옴표로 묶인 트윗에 대한 전체 데이터 문자열이 의도하지 않게 이스케이프되는 것을 발견했습니다. 또한 실제 JSON 형식의 모든 큰 따옴표는 백 슬래시로 이스케이프됩니다.

그들은 다음과 같이 보입니다 :

"{\"created_at \ ": \"8 월 8 일 금요일 11:04:40 +0000 2014 \ ", \"id \ ": 497699913925292032,

어떻게 피할 수 있습니까? 그것은해야한다:

{ "created_at": "2014 년 8 월 8 일 금요일 11:04:40 +0000".....

내 파일 아웃 코드는 다음과 같습니다.

with io.open('data'+self.timestamp+'.txt', 'a', encoding='utf-8') as f:
            f.write(unicode(json.dumps(data, ensure_ascii=False)))
            f.write(unicode('\n'))

의도하지 않은 이스케이프로 인해 이후 처리 단계에서 JSON 파일을 읽을 때 문제가 발생합니다.


JSON 문자열을 이중 인코딩하고 있습니다. data이미 JSON 문자열이며 다시 인코딩 할 필요가 없습니다 .

>>> import json
>>> not_encoded = {"created_at":"Fri Aug 08 11:04:40 +0000 2014"}
>>> encoded_data = json.dumps(not_encoded)
>>> print encoded_data
{"created_at": "Fri Aug 08 11:04:40 +0000 2014"}
>>> double_encode = json.dumps(encoded_data)
>>> print double_encode
"{\"created_at\": \"Fri Aug 08 11:04:40 +0000 2014\"}"

다음을 파일에 직접 작성하십시오.

with open('data{}.txt'.format(self.timestamp), 'a') as f:
    f.write(data + '\n')

이 원치 않는 이스케이프가 발생할 수있는 또 다른 상황은 json.dumps ()의 사전 처리 된 출력에서 ​​json.dump ()를 사용하려는 경우입니다. 예를 들면

import json, sys
json.dump({"foo": json.dumps([{"bar": 1}, {"baz": 2}])},sys.stdout)

결과적으로

{"foo": "[{\"bar\": 1}, {\"baz\": 2}]"}

이를 방지하려면 json.dumps ()의 출력이 아닌 사전을 전달해야합니다.

json.dump({"foo": [{"bar": 1}, {"baz": 2}]},sys.stdout)

원하는 출력

{"foo": [{"bar": 1}, {"baz": 2}]}

(왜 json.dumps ()로 내부 목록을 사전 처리하겠습니까? 글쎄요, 다른 것에서 내부 목록을 만드는 또 다른 함수가 있었는데 json 객체를 반환하는 것이 합리적이라고 생각했습니다. 그 기능 ... 틀렸어.)

참조 URL : https://stackoverflow.com/questions/25242262/dump-to-json-adds-additional-double-quotes-and-escaping-of-quotes

반응형