일부 JSON 시리얼 라이저는 빈 문자열 데이터 필드에 null
을 반환합니다. 나는 ISuperObject을 만들 객체 (superobject)를 사용하고SuperObject에서 null 문자열을 처리 할 수 없습니다.
{
"searchtext": null,
"moretext": "contains something",
"bookdate": 1377468000000,
"empid": 12345,
"listtype": 1
}
:
var
FJSONRequest: ISuperObject;
then
FJSONRequest := SO(Request.Content); // Webservice request
이 텍스트 'null'
를 포함하는 문자열 개체를 반환합니다.
분명히 SuperObject는 따옴표를 신경 쓰지 않기 때문입니다 ("searchtext": a
은 "searchtext": "a"
과 같은 결과를 나타냄).
980 라인 토크 나이저 루틴에 들어가기 전에 어느 것이 해결책이 있습니까?
나는 라인을 따라 생각 (중/또는) 해요 :
- 는 JSON 객체에서
반환 빈 문자열을 널 데이터 필드를 떠나
하는 경우 그 밖의 모든 것은 여전히 실패 할 수 있습니다.
FJSONRequest := SO(StringReplace(Request.Content,': null,',':,',[rfReplaceAll]));
개발자의 앱에서 오는 요청을 처리하기 만하면되기 때문에 필요하지만 간단하지는 않습니다. 그 해결 방법은 일을하지 않도록 BTW 내가 정확히 the behaviour mentioned here하지만, 객체 (superobject) 코드의 다른 부분에서 발생하고있어
(아니, 그는 null
there's a bug in the way Mono handles his datacontract 때문에 억제 할 수 없다.)
.
null은 빈 문자열과 동일하지 않습니다. 그것은 완전히 다른 의미를 지닙니다. 'StringReplace'는 작동하지 않습니다. 텍스트가 무효화되는 것을 생각하십시오. –
내 stringReplace()를 더 엄격하게 설정하지만 실제로는 절대적으로 아닙니다. –
귀하가 언급 한 버그는 [보고되기 1 년 전에 고쳐진 것 같습니다] (https://code.google.com/p/superobject/source/detail?r=55d5b03a621bc2570e50da5d745ded4e9b0dfa12). 슈퍼 오브젝트가 유효한 JSON을 올바르게 파싱하고 무효 인 JSON을 전혀 거부하지 않기 때문에 'null'의 토큰 화 역시 정확합니다. 'TSuperObject.ParseEx'에서'tsNull' 상태 처리하기 (https://code.google.com/p/superobject/source/browse/superobject.pas#3400)를 찾으십시오. 최신 버전의 코드를 사용하고 있습니까? –