Delphi(tokyo)로 JSON타입으로 RESPONSE할때 마지막 데이타값으로만 들어갑니다 ㅠ

조회수 845회

objFind := TJSONObject.Create; objFind1 := TJSONArray.Create; objFind4 := TJSONObject.Create; objFind3 := TJSONArray.Create; objFind2 := TJSONObject.Create;

      With nxQuery2.Create(self) do
      begin
        try
          Database := nxDatabase1;
          for I := 0 to nxQuery1.FieldByName('CNT').AsInteger - 1 do
          begin
            SQL.Text := ' SELECT A.* , B.NAME PET_NAME                                 '+#13+
                        '       ,B.SNO PET_SNO                                         '+#13+
                        ' FROM   HOSPPET A, PET B                                      '+#13+
                        ' WHERE  A.STATE   = 7                                         '+#13+
                        '   AND  A.TERM_NO = :TERM_NO                                  '+#13+
                        '   AND  A.PET_NO  = B.SNO                                     '+#13;
            nxQuery2.ParamByName('TERM_NO').AsInteger := nxQuery1.FieldByName('SNO').AsInteger;
            nxQuery2.open;
            if nxQuery2.RecordCount > 0 then
            begin
              objFind4.AddPair('termNo'     ,TJSONNumber.Create(nxQuery1.FieldByName('SNO').AsInteger));
              objFind4.AddPair('termRegCnt' ,TJSONNumber.Create(nxQuery1.FieldByName('CNT').AsInteger));
              objFind4.AddPair('termName'   ,nxQuery1.FieldByName('TERM_NAME').AsString);
              for j := 0 to nxQuery2.RecordCount - 1 do
              begin
                objFind2.AddPair('petname',nxQuery2.FieldByName('PET_NAME').AsString);
                objFind2.AddPair('test2','34');
                objfind3.Add(objfind2);
                nxQuery2.Next;
              end;
              objFind4.AddPair('termRegList',objFind3);
              objFind1.Add(objFind4);
            end;
            nxQuery1.Next;
          end;
          Result.AddPair('code',TJSONNumber.Create(200));
          Result.AddPair('cmd' ,api_name);
          Result.AddPair('msg' ,objFind1);
        finally
          free;
        end;

      end;

위와같이 코딩이되어있는상태로 실행을하면 아래와 같이 나옵니다. 위소스는 바깥쪽 1~6까지 FOR문을 돌면서 DB상 TERM_NO와 같을시 해당 이름을 뿌려주는 소스입니다. 두개의 큰 JSONARRAY로 이루어진건 2,6이란 TERM_NO가 있기때문이고 안쪽 REGLIST 쪽에 3개의 데이타가 나온이유는 DB상 ROW가 3줄이기 때문입니다. 아직 조금 수정되어야 하는 부분이 많지만 안쪽 ROW데이타값이 마지막 6에 해당하는 '마노'라는 이름의 데이타만 나오는 이유가 뭘까요?

}이미지

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 이미지

    자답입니다... OBJECT와 ARRAY create를 각각에다가 해줘야되네요 ㅠㅠ 감사합니다

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)