错误ArgumentException:JSON必须表示PyZeroMQ服务器中的对象类型

2024-10-03 06:29:33 发布

您现在位置:Python中文网/ 问答频道 /正文

试图解析从Python服务器返回的Json对象时遇到问题。 我得到的错误是 “ArgumentException:JSON必须表示对象类型。”

令人费解的是,如果我获取服务器返回的确切字符串,并在将其传递给解析方法Player.CreateFromJSON之前对其进行硬编码,它就会工作

以下是Python服务器中的3行相关代码

 x = '{"playerId":8484239823,"playerLoc":"Powai","playerNick":"Random Nick"}'
 y = json.dumps(x)
 socket.send_string(y)

这是返回的JSON字符串

"{\"playerId\":8484239823,\"playerLoc\":\"Powai\",\"playerNick\":\"Random Nick\"}"

这是我的播放器对象

[System.Serializable]
public class Player
{
    public string playerId;
    public string playerLoc;
    public string playerNick;

    public static Player CreateFromJSON(string jsonString)
    {
        return JsonUtility.FromJson<Player>(jsonString);
    }
}

我使用Unity的原生JsonUtility FromJson方法,从上面可以看出,我只需调用

Player playerInfo = Player.CreateFromJSON(jsonStringFromServer);

填充播放器对象的步骤

他们花了无数个小时在谷歌上搜索,试图找到类似的问题。欢迎任何反馈或故障排除步骤


Tags: 对象方法字符串jsonstringrandompublicnick
1条回答
网友
1楼 · 发布于 2024-10-03 06:29:33

问题出在Python代码中;也就是说,x已经是一个JSON字符串;您不需要调用json.dumps(x),您可以改为使用socket.send_string(x)直接发送它

事实上,y = json.dumps(x)返回一个JSON编码的JSON字符串:

'"{\\"playerId\\":8484239823,\\"playerLoc\\":\\"Powai\\",\\"playerNick\\":\\"Random Nick\\"}"'

无法解码为Player对象-因为它是string!删除Python代码中的那一行,直接socket.send_string(x)

相关问题 更多 >