programing

JSON 텍스트에는 2개 이상의 옥텟이 포함되어 있어야 합니다.

css3 2023. 3. 31. 22:34

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은 다음 두 가지 구조를 기반으로 구축됩니다.

  1. 이름/값 쌍의 집합입니다.다양한 언어에서 이는 객체, 레코드, 구조, 사전, 해시 테이블, 키 목록 또는 연관 배열로 실현됩니다.

  2. 값의 순서부 리스트.대부분의 언어에서 이것은 배열, 벡터, 목록 또는 시퀀스로 실현됩니다.

따라서 최상위 레벨에서 필요한 옥텟(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