Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr
  • 0

RESTful API JSON 파싱시 커널 Access violation


Ryan Kwon

질문

AnsiString Content = RESTResponse1->Content;
TJSONObject *ContentObject = new TJSONObject();
ContentObject->ParseJSONValue(TEncoding::ASCII->GetBytes(Content), 0);
AnsiString stdOut = ContentObject->Get("stdout")->ToString();

Content를 정상적으로 수신했지만, JSON Object에서 "stdout" 항목을 Get할 시 KERNELBASE.dll에서 Access violation이 발생합니다.

Embarcadero DocWiki, Stack Overflow등을 참고하여 수정해보았지만 문제가 해결되지 않아 질문드립니다 ㅜ.ㅜ

image.png.3c30ec0857a111357af83bd41d561e29.png

Edited by Ryan Kwon
이 댓글 링크
다른 사이트에 공유하기

6 answers to this question

Recommended Posts

  • 0

TRESTResponse 컴포넌트로 받은 JSON 문자열 중 필요한 항목의 값을 취득하는 방법을 문의하신 것으로 이해합니다.

TRESTResponse 컴포넌트는 수신받은 JSON 문자열(RESTResponse1->Content)도 있지만, 

TJSONValue 타입의 JSONValue 객체도 제공합니다. JSONValue 객체를 통해 필요한 값을 취득 할 수 있습니다.

On 2021. 9. 17. at 오후 4시 51분, Ryan Kwon said:
{"stdout":"SGVsbG8gV29ybGQhCg==\n","time":"0.003","memory":70488,"stderr":null,"token":"fb4da198-a9bf-4fa2-b07f-ec65f4c35dc7","compile_output":null,"message":null,"status":{"id":3,"description":"Accepted"}}

등록해주신 JSON 문자열 기준으로 코드를 작성하면 다음과 같습니다.

#include "System.JSON.hpp"

	TJSONValue *JSONValue = RESTResponse1->JSONValue;
	ShowMessage(JSONValue->GetValue<String>("stdout"));

(테스트한 샘플도 첨부합니다. 해당 샘플은 C++ Builder 11.0 알렉산드리아로 작성되었습니다.)

RADServerCppSample.zip

다음 엠바카데로 DocWiki(기술문서)에서 관련된 내용을 참고하실 수 있습니다.

 

이 댓글 링크
다른 사이트에 공유하기

  • 0
{"stdout":"SGVsbG8gV29ybGQhCg==\n","time":"0.003","memory":70488,"stderr":null,"token":"fb4da198-a9bf-4fa2-b07f-ec65f4c35dc7","compile_output":null,"message":null,"status":{"id":3,"description":"Accepted"}}

 위 텍스트가 AnsiString-type variable에 담겨있습니다.

이 댓글 링크
다른 사이트에 공유하기

  • 0

위의 코드가 좀 이상한것 같습니다. ContentObject->ParseJSONValue(TEncoding::ASCII->GetBytes(Content), 0); 이 코드에서 함수의 리턴 값을  assign 하는 부분이 없네요. 정확한 확인을 위해서 코드를 좀 확인해 주시고 다시 코드를 보내주십시오.

이 댓글 링크
다른 사이트에 공유하기

  • 0

구글에서 찾은 예시 코드를 베이스로 작성하였습니다.

위의 코드로 작성하였고, ContentObject 객체에 넣어주는 과정이라고 생각하였습니다.

제가 원하는 결과는 RESTResponse1->Content의 stdout을 parse하는것 입니다.

도움을 받을 수 있을까요?

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 질문에 답변하기...

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.