to_json формирует текстовую строку формата json из словаря данных dataframe
to_dict формирует сам словарь
Соответственно, если пытаетесь сделать так:
dx = df.to_json(orient='split')
datajs = json.dumps({"datj": dx})
то datajs - это строка, а не словарь, поэтому брать от нее значения по ключу не получится
"datj" нужно брать не от datajs, а от dx
dx = json.loads(datajs)
dg = pd.read_json(dx["datj"], orient='split')
И если как написано изначально, вы передаете json в параметре x = json.damps("y": y, "dataframe": dataframe)
то можно в "dataframe" передать словарь, который потом и закодируется в json через dumps
x = json.dumps("y": y, "dataframe": df.to_dict(orient='split'))