JSON 파일에서 TAB을 구문 분석할 수 없습니다.
TAB 문자가 들어간 것 같은 JSON 파일을 로드할 때 해석에 문제가 있습니다.
http://jsonlint.com/,에 접속하여 TAB 문자와 함께 부품을 입력하면 다음과 같이 됩니다.
{
"My_String": "Foo bar. Bar foo."
}
검증자는 다음과 같이 불만을 제기합니다.
Parse error on line 2:
{ "My_String": "Foo bar. Bar foo."
------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
이것은 문제의 JSON 텍스트를 문자 그대로 복사/붙여넣는 것입니다.
이 파일을 로딩해 보았습니다.json
그리고.simplejson
성공하지 못하고어떻게 하면 제대로 장전할 수 있을까요?파일을 전처리하고 Tab을 다음으로 대체해야 합니까?\t
아니면 공간인가?아니면 제가 여기서 놓치고 있는 게 있나요?
업데이트:
여기에도 문제가 있는 예가 있습니다.simplejson
:
foo = '{"My_string": "Foo bar.\t Bar foo."}'
simplejson.loads(foo)
JSONDecodeError: Invalid control character '\t' at: line 1 column 24 (char 23)
JSON 표준에서:
토큰 앞 또는 뒤에는 중요하지 않은 공백이 허용됩니다.공백 문자는 문자표(U+0009), 줄바꿈(U+000A), 캐리지 리턴(U+000D) 및 공간(U+0020)입니다.문자열에 공백이 허용된다는 점을 제외하고 토큰 내에는 공백이 허용되지 않습니다.
즉, JSON 문자열에는 리터럴탭 문자를 사용할 수 없습니다.당신은 그것을 탈출할 필요가 있다.\t
(.json 파일):
{"My_string": "Foo bar.\t Bar foo."}
또한 Python 문자열 리터럴 내에 json 텍스트가 제공되는 경우 탭을 이중 이스케이프해야 합니다.
foo = '{"My_string": "Foo bar.\\t Bar foo."}' # in a Python source
또는 Python raw string 리터럴을 사용합니다.
foo = r'{"My_string": "Foo bar.\t Bar foo."}' # in a Python source
탭은 값을 제외한 공백으로 구분하는 것이 합법적이지만 문자열 내에서는 구분되지 않습니다.JSON 문자열 내의 탭을 가져오려면 이 순서를 사용해야 합니다.\t
대신.
그러나 다양한 수준의 해석에 주의해야 합니다.업데이트에서 다음 Python 문자열:
foo = '{"My_string": "Foo bar.\t Bar foo."}'
유효한 JSON이 아닙니다.Python 인터프리터가 이 JSON을 돌리기 때문입니다.\t
JSON 프로세서가 인식하기 전에 실제 탭 문자로 시퀀스를 진행합니다.
Python에게 리터럴을 넣으라고 할 수 있습니다.\t
탭 문자 대신 백슬래시를 2배로 하여 문자열에 입력합니다.
foo = '{"My_string": "Foo bar.\\t Bar foo."}'
또는 특별한 백슬래시 시퀀스를 해석하지 않는 "raw" 문자열 구문을 사용할 수도 있습니다.
foo = r'{"My_string": "Foo bar.\t Bar foo."}'
어느 쪽이든 JSON 프로세서는 탭을 포함하는 문자열이 아니라 백슬래시를 포함하는 문자열 뒤에 't'가 표시됩니다.
값을 이스케이프하여(공백 대신) 값에 탭을 포함할 수 있습니다.다음 예시는 다음과 같습니다.json
Python 2.7의 모듈:
>>> import json
>>> obj = json.loads('{"MY_STRING": "Foo\\tBar"}')
>>> obj['MY_STRING']
u'Foo\tBar'
>>> print obj['MY_STRING']
Foo Bar
탈출하지 않고'\t'
에러가 발생합니다.
>>> json.loads('{"MY_STRING": "Foo\tBar"}')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 365, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 381, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Invalid control character at: line 1 column 19 (char 18)
내 경험을 공유하기 위해:
저는 snake make와 Json으로 작성된 설정 파일을 사용하고 있습니다.json 파일에는 들여쓰기를 위한 탭이 있습니다.TAB는 이 목적을 위해 합법적입니다.그러나 snakemake.exceptions 오류 메시지가 나타납니다.WorkflowError: 구성 파일이 유효한 JSON 또는 YAML이 아닙니다. 이것은 snake make의 버그라고 생각합니다만, 틀릴 수 있습니다.댓글 달아주세요.모든 탭을 공백으로 교체하면 오류 메시지가 사라집니다.
노드 레드 플로우에서는 다음과 같은 문제가 발생합니다.
flow.set("delimiter",'"\t"');
에러:
{ "status": "ERROR", "result": "Cannot parse config: String: 1: in value for key 'delimiter': JSON does not allow unescaped tab in quoted strings, use a backslash escape" }
솔루션:
넣었어요\\t
암호에 입력되어 있습니다.
flow.set("delimiter",'"\\t"');
언급URL : https://stackoverflow.com/questions/19799006/unable-to-parse-tab-in-json-files
'programing' 카테고리의 다른 글
워드프레스:위젯 $args 내에서 할당된 게시 ID를 제외하는 사용자 지정 루프 (0) | 2023.03.08 |
---|---|
외부 js 함수에서 AngularJS 액세스 범위 (0) | 2023.03.08 |
Angularjs가 트랜스코프 및 바인딩을 분리하여 혼란스러워함 (0) | 2023.03.08 |
as_json이 어소시에이션으로 as_json을 호출하지 않음 (0) | 2023.03.08 |
AngularJs에서 ng-Cloak 지시어를 실제로 사용하는 방법은 무엇입니까? (0) | 2023.03.08 |