테이블 정보 불러오기 오류

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

  • 뒤끝 SDK 버전 : 5.7.0
  • 프로젝트명 : Loheldi_test
  • 스테이터스 코드 :
  • 에러 코드 :
  • 에러 메시지 : KeyNotFoundException: The given key was not present in the dictionary.

안녕하세요 항상 잘 이용하고 있습니다. 테이블에 정보 삽입까지는 잘 되었는데, 테이블에 있는 정보를 불러오는 것이 제가 써봤던 db형식과는 조금 다른 느낌이라 애를 먹고 있습니다. dictionary라는 항목을 어떻게 이용해야 바람직 한 건지 궁금하구요, 현재 제가 오류가 난 코드를 통해 문제점이 어떤것인지 알려주시면 감사하겠습니다. 초보라 죄송합니다ㅠ

dictionary

  • Dictionary<string, int> charset = new Dictionary<string, int>
    {
    { “Level”, 1 },
    { “Coin”, 2000 },
    { “Exp”, 150 }
    };

정보 삽입
public void AddUserData()
{

    Param param = new Param();
    param.Add("이름", "cheolsu");
    param.Add("level", 1);
    param.Add("coin", 10);
    param.Add("exp", 0);
    
    BackendReturnObject BRO = Backend.GameData.Insert("character", param);

    if (BRO.IsSuccess())
    {
        print("동기 방식 데이터 입력 성공");
    }
    else Error(BRO.GetErrorCode(), "gameData");
}

정보 읽기
public void readData()
{
var bro = Backend.GameData.Get(“character”, new Where(), 10);
if (bro.IsSuccess())
{
JsonData jsonData = bro.GetReturnValuetoJSON();
string level = jsonData[“charset”][0][“level”][0].ToString();
string coin = jsonData[“charset”][0][“coin”][0].ToString();
string exp = jsonData[“charset”][0][“exp”][0].ToString();

        print($"Level : {level} Coin : {coin} Exp : {exp}");
        
    }
    else Error(bro.GetErrorCode(), "gameData");
    if (bro.GetReturnValuetoJSON()["rows"].Count <= 0)
    {
        // 요청이 성공해도 where 조건에 부합하는 데이터가 없을 수 있기 때문에
        // 데이터가 존재하는지 확인
        // 위와 같은 new Where() 조건의 경우 테이블에 row가 하나도 없으면 Count가 0 이하 일 수 있다.
        Debug.Log(bro);
        return;
    }

    // 검색한 데이터의 모든 row의 inDate 값 확인
    for (int i = 0; i < bro.Rows().Count; ++i)
    {
        var inDate = bro.Rows()[i]["inDate"]["S"].ToString();
        Debug.Log(inDate);
    }
    
}

안녕하세요 개발자님,
해당 로직은 각각의 level, coin, exp이라는 컬럼에 값을 넣은 로직입니다.('이름’이라는 한글로된 컬럼 혹은 키는 에러가 발생할 수 있으므로 생성하는것을 추천드리지 않습니다.)
또한 데이터 타입이 복잡할 경우 BackendReturnObject를 Debug.Log로 확인해보면 리턴값이 어떠한지 알 수 있으니 해당 부분도 참고해주시기 바랍니다.

public void readData()
{
var bro = Backend.GameData.Get("character", new Where(), 10);

Debug.Log(bro);

if (bro.IsSuccess())
{
JsonData jsonData = bro.GetReturnValuetoJSON();
string level = jsonData["rows"][0]["level"]["N"].ToString(); // 숫자형으로 저장했기때문에 N이 붙습니다.
string coin = jsonData["rows"][0]["coin"]["N"].ToString();
string exp = jsonData["rows"][0]["exp"]["N"].ToString();

        print($"Level : {level} Coin : {coin} Exp : {exp}");
        
    }
    else Error(bro.GetErrorCode(), "gameData");
    if (bro.GetReturnValuetoJSON()["rows"].Count <= 0)
    {
        // 요청이 성공해도 where 조건에 부합하는 데이터가 없을 수 있기 때문에
        // 데이터가 존재하는지 확인
        // 위와 같은 new Where() 조건의 경우 테이블에 row가 하나도 없으면 Count가 0 이하 일 수 있다.
        Debug.Log(bro);
        return;
    }

    // 검색한 데이터의 모든 row의 inDate 값 확인
    for (int i = 0; i < bro.Rows().Count; ++i)
    {
        var inDate = bro.Rows()[i]["inDate"]["S"].ToString();
        Debug.Log(inDate);
    }
    
}

만약 dictionary를 사용하고 싶다면 아래와 같이 사용해주세요

Param param = new Param();
param.Add("charset", charset) // dictionary 삽입
BackendReturnObject BRO = Backend.GameData.Insert("character", param);

var bro = Backend.GameData.GetData("character", new Where());
JsonData json = bro.GetFlattenJSON(); // GetReturnValuetoJSON 함수에서 자동생성되는 ["S"] ["N"]등의 데이터타입키를 자동으로 제거한 후 Json형태로 리턴해주는 함수입니다.

string level = json["rows"]["charset"][0]["level].ToString();