programing

JSONDecodeError: 예상 값: 1행 1열(char 0)

newsource 2022. 11. 17. 21:16

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에 대한 .simplejsonjson .loads()네이티브하게 할 수 있습니다.method는 UTF8 부호화 데이터를 처리할 수 있습니다.

  • pycurlAPI를 사용하다특별한 사용 요건이 없는 한 더 나은 선택지가 있습니다.

또는 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()

참고: 데이터 내의 따옴표는 올바르게 이스케이프해야 합니다.

requestsJSONDecodeError404와 같은 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-encodingheader를 클릭합니다.

다음과 같이 설정되었습니다.'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()면면됩됩됩됩됩

나는 했다:

  1. .test.txt, "데이터 쓰기"
  2. .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