JSON 텍스트에는 2개 이상의 옥텟이 포함되어 있어야 합니다.
이 에러가 발생하여 이 질문에 대한 적절한 답을 찾을 수 없었기 때문에 문제의 개요를 작성하려고 합니다.
이 스니펫을 irb로 실행하는 경우:
JSON.parse( nil )
다음의 에러가 표시됩니다.
TypeError: can't convert nil into String
그 기능이 돌아올 줄 알았는데nil
, 이 아닌TypeError
. 를 사용하여 모든 입력을 변환하는 경우to_s
옥텟 에러가 표시됩니다.
JSON::ParserError: A JSON text must at least contain two octets!
그거 참 잘됐다.옥텟이 무엇인지 모르는 경우는, 다음의 투고를 읽고, 개요와 솔루션을 확인해 주세요.JSON 옥텟이란 무엇이며, 2개가 필요한 이유는 무엇입니까?
솔루션
전달하고 있는 변수는 빈 문자열입니다.에서 빈 문자열을 사용하지 마십시오.JSON.parse
방법.
질문.
에러의 원인을 알 수 있었습니다.어떤 패턴을 사용하면 좋을까요?JSON 라이브러리에 패치를 적용해서nil
가치.어떤 제안이라도 해주시면 감사하겠습니다.
parsed = json && json.length >= 2 ? JSON.parse(json) : nil
하지만 정말로 도서관은 이 사건을 처리할 수 있고 아무것도 반환되지 않을 것이다.JSON을 지원하는 웹 브라우저는 역시 예상대로 작동하는 것 같습니다.
또는 약간 거슬리는 미니 패치로만 작업을 수행할 수 있습니다.
module JSON
def self.parse_nil(json)
JSON.parse(json) if json && json.length >= 2
end
end
parsed = JSON.parse_nil(json)
data.presence && JSON.parse(data)
JSON.parse(data.presence || '{}')
json.org에 따르면
JSON은 다음 두 가지 구조를 기반으로 구축됩니다.
이름/값 쌍의 집합입니다.다양한 언어에서 이는 객체, 레코드, 구조, 사전, 해시 테이블, 키 목록 또는 연관 배열로 실현됩니다.
값의 순서부 리스트.대부분의 언어에서 이것은 배열, 벡터, 목록 또는 시퀀스로 실현됩니다.
따라서 최상위 레벨에서 필요한 옥텟(8비트)은 최소 2개입니다.{}
또는[]
IMO, 가장 좋은 해결책은 그 주장을 확실하게 하는 것입니다.JSON.parse
는 스트레이트된 오브젝트 또는 스트레이트된 배열 중 하나입니다. :- )
hash = JSON.parse(json) rescue {}
array = JSON.parse(json) rescue []
string = JSON.parse(json) rescue ''
언급URL : https://stackoverflow.com/questions/8390256/a-json-text-must-at-least-contain-two-octets
'programing' 카테고리의 다른 글
React Functional 컴포넌트: 함수와 컴포넌트로 호출 (0) | 2023.03.31 |
---|---|
miniated javascript stack trace를 소스 맵에 대해 실행하여 적절한 오류를 얻으려면 어떻게 해야 합니까? (0) | 2023.03.31 |
중력 형태 추가 디스플레이 없음 (0) | 2023.03.31 |
Google API 콘솔을 다른 개발자와 공유하는 방법 (0) | 2023.03.31 |
'rufous-sandbox'라는 바디 태그에 이상한 iframe이 추가됨 (0) | 2023.03.31 |