尝试解析从我的Python服务器返回的Json对象时遇到问题。
我得到的错误是
“ArgumentException:JSON必须表示一个对象类型。”
令人费解的是,如果我从服务器返回的确切字符串接受并将其硬编码,然后再将其传递给解析方法Player.CreateFromJSON,它将起作用!
这些是Python服务器中的3条相关行
这是返回的JSON字符串。 x = '{"playerId":8484239823,"playerLoc":"Powai","playerNick":"Random Nick"}'
y = json.dumps(x)
socket.send_string(y)
这是我的Player对象"{\"playerId\":8484239823,\"playerLoc\":\"Powai\",\"playerNick\":\"Random Nick\"}"
从上面可以看出,我正在使用Unity的本地JsonUtility FromJson方法,我只是简单地调用[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);
}
}
填充Player对象Player playerInfo = Player.CreateFromJSON(jsonStringFromServer);
花了无数个小时来搜寻和尝试寻找类似的问题。欢迎任何反馈或故障排除步骤!
最佳答案
问题出在您的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)
。
关于python - 错误ArgumentException : JSON must represent an object type from PyZeroMQ server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63385530/