2014-05-25 5 views
4

SuperObject JSON 라이브러리를 널리 사용합니다. 개체에 특정 요소가 있는지 여부를 확인할 수 있어야합니다. 존재하지 않는 정수와 같은 요소의 값을 확인할 수 있습니다. 0을 반환합니다. 그러나 존재하는 경우 0이 가능한 값 중 하나입니다. 따라서 요소 존재 여부에 대해 0을 관찰하는 데 의존 할 수 없습니다. 나는 이것을 할 수있는 방법을 위해 ISuperObject을 확인했다. (예를 들어, 나는 ISuperObject.Exists(const S: String): Boolean;과 같은 것을 기대한다.SuperObject에 특정 요소가 있는지 확인하는 방법은 무엇입니까?

특정 요소가 JSON 개체에 있는지 여부를 어떻게 확인할 수 있습니까? 특정 필드가 같이 존재하는 경우

+0

합니까이 작품 :'obj.AsObject.Exists ('AreYouThere?')의 경우 then'? –

+0

@LURD 아니, 그런 기능이 없다. 내가 기대했던 것의 예가 그 것이다. –

+1

'TSuperObject.AsObject'는'TSuperTableString' 타입이며,'Exists()'함수를 가지고 있습니다. –

답변

5

SuperObject의 최신 업데이트는 Exists() 기능을 포함합니다.

var 
    obj : ISuperObject; 
begin 
    obj := TSuperObject.ParseFile('..\..\SAMPLE.JSON',FALSE); 
    if not obj.AsObject.Exists('FindMe') then begin 
    WriteLn('Not found'); 
    end; 
end; 

대신 dwsJSON 파서를 사용해야하는 경우, 사용하는 유사한 기능이있다 :

if json['DoesNotExists'].ElementCount = 0 then begin 
    WriteLn('Not found'); 
end; 
+0

"최신 다운로드"가 2010 년이 아니라면 아주 좋을 것입니다. 업데이트해야합니다. –

+1

@Jerry, 그들은 더 이상 할 수 없습니다. Google Code는 다운로드 지원을 중단했습니다 (이로 인해 여러 프로젝트가 상당히 거대하게 마이그레이션 된 이유 일 수 있음). – TLama

4

확인해 볼 수 있습니다 : field_name가있는 경우

function FieldExists(const ASuperObject: ISuperObject; const AField: String): Boolean; 
var 
    o: ISuperObject; 
begin 
    o := ASuperObject.O[AField]; 
    result := Assigned(o); 
end; 

기본적으로, json_superobject.O[field_name]ISuperObject에 대한 포인터를 반환해야합니다. 그렇지 않으면 nil을 반환합니다.

관련 문제