JSONDecodeError: 예상 값: 1행 1열(char 0)
.Expecting value: line 1 column 1 (char 0)
JSON 。
API 호출에 사용하는 URL은 브라우저에서 정상적으로 작동하지만 컬 요청을 통해 수행되면 이 오류가 발생합니다.다음은 제가 컬 요청에 사용하는 코드입니다.
가 return simplejson.loads(response_json)
response_json = self.web_fetch(url)
response_json = response_json.decode('utf-8')
return json.loads(response_json)
def web_fetch(self, url):
buffer = StringIO()
curl = pycurl.Curl()
curl.setopt(curl.URL, url)
curl.setopt(curl.TIMEOUT, self.timeout)
curl.setopt(curl.WRITEFUNCTION, buffer.write)
curl.perform()
curl.close()
response = buffer.getvalue().strip()
return response
트레이스백:
File "/Users/nab/Desktop/myenv2/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/Users/nab/Desktop/pricestore/pricemodels/views.py" in view_category
620. apicall=api.API().search_parts(category_id= str(categoryofpart.api_id), manufacturer = manufacturer, filter = filters, start=(catpage-1)*20, limit=20, sort_by='[["mpn","asc"]]')
File "/Users/nab/Desktop/pricestore/pricemodels/api.py" in search_parts
176. return simplejson.loads(response_json)
File "/Users/nab/Desktop/myenv2/lib/python2.7/site-packages/simplejson/__init__.py" in loads
455. return _default_decoder.decode(s)
File "/Users/nab/Desktop/myenv2/lib/python2.7/site-packages/simplejson/decoder.py" in decode
374. obj, end = self.raw_decode(s)
File "/Users/nab/Desktop/myenv2/lib/python2.7/site-packages/simplejson/decoder.py" in raw_decode
393. return self.scan_once(s, idx=_w(s, idx).end())
Exception Type: JSONDecodeError at /pricemodels/2/dir/
Exception Value: Expecting value: line 1 column 1 (char 0)
코드가 빈 응답 본문을 생성했습니다. 이 코드를 확인하거나 발생한 예외를 포착할 수 있습니다.서버가 204의 No Content 응답으로 응답했거나 200 범위 이외의 상태 코드가 반환되었을 수 있습니다(404 Not Found 등).이것 좀 봐.
주의:
.
simplejson
에는 Python, Python과 되어 있습니다.json
★★★★★★ 。Unicode인 UTF8에 대한 .
simplejson
json
.loads()
네이티브하게 할 수 있습니다.method는 UTF8 부호화 데이터를 처리할 수 있습니다.pycurl
API를 사용하다특별한 사용 요건이 없는 한 더 나은 선택지가 있습니다.
또는 JSON 지원을 포함한 보다 편리한 API를 제공합니다.가능한 경우, 콜을 다음과 같이 바꿉니다.
import requests
response = requests.get(url)
response.raise_for_status() # raises exception when not a 2xx response
if response.status_code != 204:
return response.json()
물론 HTTP 표준에 준거하지 않는 URL로부터 보호되는 것은 아닙니다.이것이 가능한 경우 서버가 Content-Type 헤더를 체크하여 JSON을 제공하려고 하는지 여부를 확인하고 적절한 조치를 취하기 위해 예외를 포착합니다.
if (
response.status_code != 204 and
response.headers["content-type"].strip().startswith("application/json")
):
try:
return response.json()
except ValueError:
# decide how to handle a server that's misbehaving to this extent
" " " 를 호출해 주세요.json.loads()
JSON의 파일 경로가 아닌 파일 내용:
json_file_path = "/path/to/example.json"
with open(json_file_path, 'r') as j:
contents = json.loads(j.read())
많은 사람들이 가끔 이런 행동을 하는 것에 대해 죄책감을 느낀다고 생각합니다(나 자신도 포함).
contents = json.loads(json_file_path)
응답 데이터 본문을 확인하여 실제 데이터가 존재하는지, 데이터 덤프의 형식이 올바른지 확인합니다.
, 「 」는 「 」로 되어 있습니다.json.loads
-JSONDecodeError: Expecting value: line 1 column 1 (char 0)
는 다음과 같은으로 발생합니다.
- JSON에 준거하지 않는 견적
- XML/HTML 출력(즉, <로 시작하는 문자열) 또는
- 호환되지 않는 문자 인코딩
최종적으로 이 에러는 첫 번째 위치에서 문자열이 이미 JSON에 준거하고 있지 않음을 나타냅니다.
따라서 언뜻 보기에 JSON과 같은 데이터 본체가 있는데도 해석에 실패할 경우 데이터 본체의 따옴표를 바꿔 보십시오.
import sys, json
struct = {}
try:
try: #try parsing to dict
dataform = str(response_json).strip("'<>() ").replace('\'', '\"')
struct = json.loads(dataform)
except:
print repr(resonse_json)
print sys.exc_info()
참고: 데이터 내의 따옴표는 올바르게 이스케이프해야 합니다.
★requests
JSONDecodeError
404와 같은 http 에러 코드가 있어 응답을 JSON으로 해석하려고 하면 발생할 수 있습니다.
이 경우를 방지하려면 먼저 200(OK)을 확인하거나 오류 발생 시 발생하도록 해야 합니다.에러 메시지와 함께 실패했으면 합니다.
주의: Martijn Pieters가 코멘트에서 기술한 바와 같이 오류 발생 시 서버는 JSON을 사용하여 응답할 수 있습니다(실장에 따라 다름).따라서,Content-Type
헤더의 신뢰성이 높아집니다.
파일의 인코딩 형식을 확인하고 파일을 읽을 때 해당 인코딩 형식을 사용하십시오.그게 너의 문제를 해결해 줄 거야.
with open("AB.json", encoding='utf-8', errors='ignore') as json_data:
data = json.load(json_data, strict=False)
json 파일을 읽다가 같은 문제가 발생했습니다.
json.loads("file.json")
나는 그 문제를 해결했다.
with open("file.json", "r") as read_file:
data = json.load(read_file)
아마 이게 당신의 경우에 도움이 될 것이다.
대부분의 경우 해석하려는 문자열이 비어 있기 때문입니다.
>>> import json
>>> x = json.loads("")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
이 문제를 해결하려면json_string
미리 비어 있습니다.
import json
if json_string:
x = json.loads(json_string)
else:
# Your code/logic here
x = {}
I encounterred the same problem, while print out the json string opened from a json file, found the json string starts with '', which by doing some reserach is due to the file is by default decoded with UTF-8, and by changing encoding to utf-8-sig, the mark out is stripped out and loads json no problem:
open('test.json', encoding='utf-8-sig')
디코드()를 호출한 후에도 0이 내장되어 있을 수 있습니다.replace()를 사용합니다.
import json
struct = {}
try:
response_json = response_json.decode('utf-8').replace('\0', '')
struct = json.loads(response_json)
except:
print('bad json: ', response_json)
return struct
요청(python 라이브러리)에서도 같은 문제가 발생했습니다.그것은 공교롭게도accept-encoding
header를 클릭합니다.
다음과 같이 설정되었습니다.'accept-encoding': 'gzip, deflate, br'
요청에서 삭제했을 뿐, 에러가 발생하지 않게 됩니다.
요청에 상태 코드 200이 있는지 확인하세요.예를 들어 다음과 같습니다.
if status != 200:
print("An error has occured. [Status code", status, "]")
else:
data = response.json() #Only convert to Json when status is OK.
if not data["elements"]:
print("Empty JSON")
else:
"You can extract data here"
저도 같은 문제를 안고 있었는데, 제 경우에는 다음과 같이 해결했습니다.
import json
with open("migrate.json", "rb") as read_file:
data = json.load(read_file)
python에서 json 파일을 로드하고 싶을 때 찾은 최소주의 솔루션입니다.
import json
data = json.load(open('file_name.json'))
위치 X와 Y에서 문자가 일치하지 않는다는 오류가 발생할 경우 를 추가합니다.encoding='utf-8'
내부open
둥근 괄호
data = json.load(open('file_name.json', encoding='utf-8'))
설명. open
파일을 열고 나중에 내부에서 해석할 컨테이너를 읽습니다.json.load
.
주의:with open() as f
위의 구문보다 신뢰성이 높습니다.실행 후에 파일이 닫히도록 하기 때문에 완전한 systax는
with open('file_name.json') as f:
data = json.load(f)
저는 요청을 통해 정확히 이 문제가 발생하였습니다.Christophe Roussy의 설명에 감사드립니다.
디버깅에는 다음을 사용했습니다.
response = requests.get(url)
logger.info(type(response))
API에서 404 응답을 받았습니다.
제 경우 file.read()를 if와 else로 2회 실행 중 이 에러의 원인이 되고 있는 block을 실행하였습니다.따라서 이 실수를 하지 않도록 하고 contain in variable을 유지하여 변수를 여러 번 사용하십시오.
저로서는 요청에 인증을 사용하지 않았습니다.
서버 응답은 200 이외이며, 응답은 json 형식이 아닙니다.json 구문 분석 전에 이 작업을 수행하게 되었습니다.
# this is the https request for data in json format
response_json = requests.get()
# only proceed if I have a 200 response which is saved in status_code
if (response_json.status_code == 200):
response = response_json.json() #converting from json to dictionary using json library
Python API Python에서 하였습니다..text
이 될 수 에서 응답 과 요구 은 매우 requests
..)
「」를 사용합니다.json.dumps()
요청에 따라 data
가 mearg의을 만듭니다.
requests.post(url, data=json.dumps(data))
제 경우 서버가 가끔 http 에러를 표시하기 때문입니다.따라서 기본적으로 스크립트는 예상한 응답보다 이따금씩 다음과 같은 응답을 받습니다.
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head><title>502 Bad Gateway</title></head>
<body bgcolor="white">
<h1>502 Bad Gateway</h1>
<p>The proxy server received an invalid response from an upstream server.<hr/>Powered by Tengine</body>
</html>
, "json"을 호출하려고 ..json()
JSONDecodeError: Expecting value: line 1 column 1 (char 0)
이 에러의 원인이 되는 정확한 응답을 인쇄하면, 보다 적절한 디버깅을 실시할 수 있습니다.를 들어, 「」를 사용하고 있는 는,requests
에 그냥 해 주세요..text
전).json()
면면됩됩됩됩됩
나는 했다:
- .
test.txt
, "데이터 쓰기" - .
test.txt
읽기, " 읽기"
그래서 1시 이후에는 파일을 닫지 않았어요.
나는 덧붙였다.
outfile.close()
그리고 이제 작동한다
에는 파일 하였습니다.file.read()
이 문장을 해석하려고 요.json.load(file)
json.load(file)
json.loads(data)
동작하지 않는 코드
with open("text.json") as file:
data=file.read()
json_dict=json.load(file)
작업 코드
with open("text.json") as file:
data=file.read()
json_dict=json.loads(data)
Windows 사용자인 경우 Tweepy API는 데이터 개체 간에 빈 행을 생성할 수 있습니다.이 때문에 "JSONDecodeError: Expecting value: line 1 column 1 (char 0)" 오류가 발생할 수 있습니다.이 오류를 피하기 위해 빈 행을 삭제할 수 있습니다.
예를 들어 다음과 같습니다.
def on_data(self, data):
try:
with open('sentiment.json', 'a', newline='\n') as f:
f.write(data)
return True
except BaseException as e:
print("Error on_data: %s" % str(e))
return True
레퍼런스:트위터 스트림 API가 없음에서 JSONDecodeError("Expecting value", s, err.value)를 제공합니다.
, 「」가 있는 는,"Accept-Encoding": "gzip, deflate, br"
install로 Brotli 를 설치합니다.수입하다
제 경우, 그것은 작은 따옴표를 큰따옴표로 대체하는 간단한 해결책이었습니다.내 답은 여기서 찾을 수 있다.
언급URL : https://stackoverflow.com/questions/16573332/jsondecodeerror-expecting-value-line-1-column-1-char-0
'programing' 카테고리의 다른 글
이클립스에서 선 삭제 (0) | 2022.11.17 |
---|---|
1개의 치환콜로 여러 문자를 치환하다 (0) | 2022.11.17 |
MySQL의 CHECK 제약 조건이 작동하지 않습니다. (0) | 2022.11.17 |
GitHub에서 호스트되는 외부 JavaScript 파일 링크 및 실행 (0) | 2022.11.17 |
mysql: 특정 데이터베이스에 대해 열려 있는 모든 연결을 볼 수 있습니까? (0) | 2022.11.17 |