입력이 유효한 JSON 인지 판별하는 프로그램을 작성하십시오 .
입력 : ASCII 텍스트 :
[\x00-\x7F]*참고 : ASCII에 문제가있는 경우 다른 인코딩을 자유롭게 사용하지만 게시물에 표시하십시오.
출력 :
Valid또는Invalid. 후행 줄 바꿈은 생략 될 수 있습니다.예:
$ echo '{"key": "value"}' | ./json-validate Valid $ echo '{key: "value"}' | ./json-validate Invalid규칙 :
- JSON 구문 분석 라이브러리를 사용하지 마십시오.
- 부분적으로 올바른 솔루션은 허용되지만 눈살을 찌푸리게합니다.
- 테스트 스위트 점수를 게시하십시오 (아래 참조).
짧은 올바른 솔루션 승리.
프로그램에서 json-validate-test-suite.sh 를 실행 하고 점수를 게시하십시오. 예:
$ ./json-validate-test-suite.sh ./buggy-prog
fail: should be invalid: [ 0.1e ]
fail: should be invalid: [ 0.1e+-1 ]
fail: should be invalid: [ 0.1e-+1 ]
score: 297/300
자원:
- json.org- 따라 가기 쉬운 그림으로 JSON 문법을 간결하게 정의합니다.
- RFC 4627 -JSON 사양
- json-validate.c- 테스트 슈트를 통과하는 200 라인 구현.
JSON 문법은 다음과 같습니다.
json: object | array
object: '{' members? '}'
members: pair (',' pair)*
pair: string ':' value
array: '[' elements? ']'
elements: value (',' value)*
value: string
| number
| object
| array
| 'true'
| 'false'
| 'null'
string: '"' char* '"'
char: [^"\\\x00-\x1F]
| '\' escape
escape: ["\\/bfnrt]
| u [0-9A-Fa-f]{4}
number: '-'? (0 | [1-9][0-9]*) ('.' [0-9]+)? ([Ee] [+-]? [0-9]+)?
또한 공백은 6 개의 구조 문자 앞뒤에 나타날 수 있습니다. {}[]:,
ws = [\t\n\r ]*
다음을 명심하십시오.
- 와 같은 기능에주의하십시오
isspace(). JSON의 공백은[\t\n\r ]있지만,isspace()또한 취급\v(수직 탭)와\f공간으로 (용지 공급). 단어가 그것을 가지고 있지만isdigit()수 많은 것보다는 다만 동의를[0-9]우리가 입력 ASCII에서 가정으로, 여기에 사용하는 것이 괜찮을 것 같네요. \x7F는 기술적으로 제어 문자이지만 JSON RFC는이를 언급하지 않으며 (만 언급[\x00-\x1F]) 대부분의 JSON 파서는\x7F문자열의 문자 를 허용하는 경향이 있습니다. 이러한 모호성 때문에 솔루션은이를 수용할지 여부를 선택할 수 있습니다.
7
"부분적으로 올바른 해결책이 허용되었습니다"라는 메모는 유전자 알고리즘에서 정규식을 추출하는 것을 꿈꾸고 있습니다. 나는 미쳐야한다.
—
JB
@JB : 대단 할 것입니다.
—
Joey Adams
궁금한 점은 왜
—
HoLyVieR
{key: "value"}유효하지 않은 JSON이라고 생각합니까? 유효한 자바 스크립트입니다.
@ HoLyVieR : JSON이 구문 분석하기 쉽고 구현 자에게는 모호하지 않을 것이라고 생각합니다. 이 제한이 마음에 들지 않습니다.
—
Joey Adams
유효성 검사기 스크립트의 사본이 있습니까?
—
Armand