“게임 정보” insert 문의 드립니다.

고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.

커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.

문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.

  • 뒤끝 SDK 버전 : 5.14.1
  • 프로젝트명 :
  • 스테이터스 코드 : 400
  • 에러 코드 : BadRequestException
  • 에러 메시지 : Instance of JsonData is not a dictionary

안녕하세요.

뒤끝 서버의 “게임 정보” 생성 문의 드립니다.

유저의 "게임 정보"를 클래스 타입으로 JsonData로 저장하고 불러오는 기능을 구현하려고 합니다.

  1. LitJson.JsonMapper.ToJson를 사용하여 클래스를 json으로 변환하였습니다.
  2. LitJson.JsonMapper.ToObject를 사용하여 json을 jsonData로 변환하였습니다.
  3. Param에 칼럼이름과 jsonData를 넣었습니다.
  4. 트랜잭션 리스트에 insert로 테이블 이름과 param을 넣었습니다.
  5. 서버로 데이터 삽입을 요청하면 400에러를 응답받습니다.

JsonData로 변환하는 방법에 대한 다른 질문에서 JsonMapper를 이용하여 ToJson, ToObject 후 Param으로 보내면 된다는 응답을 봤는데 어떤 부분이 잘못된건지 알 수 있을까요?

감사합니다.

스크린샷 첨부합니다.

좋아요 1

뒤끝펑션으로 Insert했을때 문제없이 저장되었습니다.

에디터에서의 코드와 뒤끝펑션에서의 코드의 차이가 없습니다.

에디터에서 Insert할 수 있는 방법을 알고싶습니다.

추가로 유니티 에디터 버전은 22.3.37입니다.

뒤끝 펑션 코드 첩부합니다.

뒤끝펑션으로 insert후 에디터에서 업데이트 시도했을때에도 같은 오류가 발생합니다.

안녕하세요 개발자님,
관련 내용 확인하여 안내드릴 수 있도록 하겠습니다.
다소 시간이 소요될 수 있는 점 양해 부탁드립니다.

좋아요 1

안녕하세요.

스키마 미정의 테이블에 object타입(JonsData)를 Insert/Update 하려고 합니다.

“Backend.GameData.TransactionWriteV2(transactionValues);”
Backend-5.11.1 버전에서는 위의 함수가 정상 동작하는 것을 확인 했습니다.

“playerDataTransactionWrite”
Backend-5.14.1 버전을 사용 할 때 위와 같은 에러(code:400)가 발생 하고 있습니다.

// 새로운 프로젝트를 만들어 테스트를 했습니다.
// https://docs.thebackend.io/sdk-docs/backend/base/tutorial
// 튜토리얼 프로젝트를 수정해 테스트 했습니다. 

TestTableColumn newData = new TestTableColumn();
newData.iData = 100;
newData.strData = System.DateTime.Now.ToString();

string strJson = LitJson.JsonMapper.ToJson(newData);
LitJson.JsonData jsonData = LitJson.JsonMapper.ToObject(strJson);

Param insertParam = new Param
{
{"Column",  jsonData}
};

playerDataTransactionWrite.AddInsert(tableName, insertParam);

확인 부탁 드립니다.
감사합니다. :smiley:

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Param에 LitJson.JsonData 를 넣는 것이 아니라
오브젝트를 넣었을 때 에러가 발생 하지 않는 것을 확인 했습니다.

스키마 미정의 테이블에 object타입을 Insert/Update 의 Param 값을
아래와 같이 사용 하는 것이 맞는지 확인 부탁 드립니다.
그리고 추천하는 방법을 부탁 드립니다.

TestTableColumn newData = new TestTableColumn();
newData.iData = 100;
newData.strData = System.DateTime.Now.ToString();

//string strJson = LitJson.JsonMapper.ToJson(newData);
//LitJson.JsonData jsonData = LitJson.JsonMapper.ToObject(strJson);
//Param insertParam = new Param
/ {
//   {"Column",  jsonData }
//};

Param insertParam = new Param
{
{"Column",  newData}
};

감사합니다.
:smiley:

안녕하세요 개발자님,
말씀해주신 현상은 현재 사용하고 계신 SDK 버전에서 발생하는 이슈로 확인됩니다.
금일 업데이트 된 SDK 5.15.0 에서 수정되어 정상적으로 호출 이용이 가능한 것으로 확인되니
SDK 업데이트 후 다시 시도하여 주시면 감사하겠습니다.

좋아요 1

네 확인해주셔서 감사합니다.

SDK 업데이트후 JsonData로 insert했을때 데이터 타입은 object인데 Dictionary<string, string>형태로 저장됩니다.

이번 SDK 업데이트후 저장된 형태는 첫번째 이미지입니다.

예전 JsonData로 저장했을때와 현재 JsonData변환없이 오브젝트로 저장했을때 형태는 두번째 이미지입니다.

첫번째 이미지의 경우 저장된 데이터를 가져와서 JsonMapper를 이용하여 자동 변환을 했을때 string으로 인식되어 오류가 발생합니다.

JsonData로 두번째 이미지처럼 object형태로 저장하는 방법을 알고싶습니다.

// 현재 JsonData저장된 타입 (Dictionary<string, string>)
image

// 예전 JsonData로 저장된 타입 (JsonData)
// 현재 JsonData변환없이 object로 저장된 타입 (object)
image

좋아요 1

기다려주셔서 감사합니다.
확인해보니 SDK 5.12.0 이상 버전에서 발생하는 이슈이며,
SDK 5.15.0 버전이 아닌 다음 SDK 버전에서 수정 예정입니다.
잘못된 안내로 혼선을 드려 죄송합니다.
추후 수정된 SDK 업데이트시 재안내드리도록 하겠습니다.

더불어, Object 형식으로 데이터를 저장할 때 JsonMapper 없이 그대로 param을 넣는 것도 가능하지만,
변환에 따른 처리 방식이 달라 특정 데이터 형식이나 클래스 구조에 따라 오류가 발생할 수 있습니다.
만약 object 변환 방식을 꼭 사용해야 하는 상황이라면, 데이터 변환에 문제가 없는지 반드시 확인해 주시길 바랍니다.

좋아요 1

안녕하세요.

제가 데이터 저장 방법을 잘못 알고 있었던 것 같습니다.

답변해 주셔서 감사합니다. :smiley:

좋아요 1