자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Firemonkey REST Debugger Json파싱 문의
2016.03.31 17:08
REST 컴포넌트를 이용하여 멀티디바이스 어플리케이션 프로젝트로 작업을 하고 있습니다.
php서버에 접속하여 검색결과를 json으로 받아오고 있느데 특정 경우에는 파싱이 안됩니다.
json데이터의 Root Element가 같은 형태인데 어떤 경우에는 파싱이 되고 어떤 경우에는 되지 않습니다.
(처음에는 Json의 크기가 너무 커서 그런가 했는데 오히려 json을 텍스트파일로 저장해보니 더 적은크기의 json을 파싱하지 못했습니다.)
이유가 무엇인지 궁금합니다.
첨부된 파일은 정상 에러났을때의 화면 캡쳐와 json을 메모장으로 저장한 것과 정상일때 화면 캡쳐와 json을 저장한 것입니다.
항상 많은 도움 받고 있습니다.
이번에도 도와주세요.
댓글 3
Firemonkey REST Debugger Json파싱 문의
2016.03.31 17:08
REST 컴포넌트를 이용하여 멀티디바이스 어플리케이션 프로젝트로 작업을 하고 있습니다.
php서버에 접속하여 검색결과를 json으로 받아오고 있느데 특정 경우에는 파싱이 안됩니다.
json데이터의 Root Element가 같은 형태인데 어떤 경우에는 파싱이 되고 어떤 경우에는 되지 않습니다.
(처음에는 Json의 크기가 너무 커서 그런가 했는데 오히려 json을 텍스트파일로 저장해보니 더 적은크기의 json을 파싱하지 못했습니다.)
이유가 무엇인지 궁금합니다.
첨부된 파일은 정상 에러났을때의 화면 캡쳐와 json을 메모장으로 저장한 것과 정상일때 화면 캡쳐와 json을 저장한 것입니다.
항상 많은 도움 받고 있습니다.
이번에도 도와주세요.
올려주신 JSON 데이터를 파서(http://jsonviewer.stack.hu/)로 확인한 일부입니다.
2번째 항목의 "WOTEXT"의 값(Value) 중간에 따움표를 포함하고 있어서 파싱 오류가 발생한 것으로 보입니다.
따움표가 포함된 경우 따움표 앞에 역슬래시를 추가하는 것이 JSON 포맷입니다.(" -> \")
참고: http://qqqqqq.tistory.com/entry/JSON-%ED%91%9C%EA%B8%B0%EB%B2%95-%EC%9D%91%EB%8B%B5-%EC%83%9D%EC%84%B1%EC%8B%9C-%EC%A3%BC%EC%9D%98%EC%A0%90
저는 REST Client로 테스트 하지 않고 아래와 같이 직접 파싱해 보니 따움표를 역슬래시로 표현하면 파싱을 잘하네요.
uses
System.JSON, REST.JSON;
procedure TForm1.Button1Click(Sender: TObject);
type
TDataItemRec = record
JO, HANG, MOK, TEXT: string;
end;
var
JOSNText: string;
Obj: TJSONObject;
Val, Item: TJSONValue;
Data: TJSONArray;
DataItem: TDataItemRec;
begin
JOSNText := Memo1.Lines.Text;
Obj := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(JOSNText), 0) as TJSONObject;
Val := obj as TJSONValue;
Memo2.Lines.Text := TJSON.Format(Val);
if Val.TryGetValue('data', Data) then
begin
for Item in Data do
begin
DataItem.JO := Item.GetValue<string>('WKJO');
DataItem.HANG := Item.GetValue<string>('WKHANG');
DataItem.MOK := Item.GetValue<string>('WKMOK');
DataItem.TEXT := Item.GetValue<string>('WKTEXT');
Memo3.Lines.Add(Format('JO: %s, HANG: %s, MOK: %s, TEXT: %s', [DataItem.JO, DataItem.HANG, DataItem.MOK, DataItem.TEXT]));
end;
end;
end;