将Unity3D json转换为Javascript对象json格式
我的整个工作流程: Unity3D(以json格式编码类数据)->WebGL构建->Javascript html->Socket.IO 这些数据类型(int,byte[],string)在socket.io中应该是可读的 这是我在Unity3D中使用的函数,用于将类转换为json字符串 ToJson() 当我在node.js中打印时,我得到了这个,它无法理解数据类型将Unity3D json转换为Javascript对象json格式,javascript,c#,json,unity3d,Javascript,C#,Json,Unity3d,我的整个工作流程: Unity3D(以json格式编码类数据)->WebGL构建->Javascript html->Socket.IO 这些数据类型(int,byte[],string)在socket.io中应该是可读的 这是我在Unity3D中使用的函数,用于将类转换为json字符串 ToJson() 当我在node.js中打印时,我得到了这个,它无法理解数据类型 {"Type":0,"Str":"AAA","Byte":[0]} 如果它是正确的,我将在node.js中打印时得到以下结果
{"Type":0,"Str":"AAA","Byte":[0]}
如果它是正确的,我将在node.js中打印时得到以下结果
{ Type: 0, Str: 'AAA', Byte: [ 0 ] }
因此,我需要一个解决方案来转换它们。
有人能告诉我用C语言转换它们的最简单方法吗
更新:更多信息
下面的C#脚本在Unity3D中工作,我想将其转换为:
Application.ExternalEval(@"
if(typeof window.socketIO !== 'undefined')
{
window.socketIO.emit('" + e + @"', " + data + @");
}
");
因为“Application.ExternalEval”在最新的Unity中被折旧了,所以我需要将它们转换为如下内容:
mergeInto(LibraryManager.library, {
WebSocketEmitData: function (_e, _data) {
var e = Pointer_stringify(_e);
var data = Pointer_stringify(_data);
if(typeof window.socketIO !== 'undefined')
{
window.socketIO.emit(e, data);
}
}
});
谢谢 我在当前的项目中大量使用了Javascript/Unity/C,我强烈建议您使用它将生成一种通用的json格式,与Javascript-json类中的格式类似
用法与unity的原始json实用程序非常相似。
JsonUtility.ToJson
=>JsonConvert.SerializeObject
JsonUtility.FromJson
=>JsonConvert.DeserializeObject
也就是说,让我们将json字符串从C#对象转换为javascript对象
// Convert your json string to a native javascript object.
var jsObject = JSON.parse(str);
console.log(jsObject.Type); // outputs 0
console.log(jsObject.Byte.length); // outputs 1
console.log(jsObject.Str); // outputs AAA
// Convert your native javascript object to another of certain type,
// will assume the desired javascript type is Player in a namespace Database
var player = Object.assign(new Database.Player(), jsObject);
另外,使用
if(typeof window.socketIO!=“undefined”)代替if(typeof window.socketIO)
它更干净,检查空值和未定义值。最后我自己找到了答案。我没有注意到我可以发出对象而不是字符串消息。现在它工作了
WebSocketEmitData: function (_e, _data) {
var e = Pointer_stringify(_e);
var data = Pointer_stringify(_data);
var obj = JSON.parse(data);
if(typeof window.socketIO !== 'undefined')
{
window.socketIO.emit(e, obj);
}
}
您的“正确格式”不是有效的JSON,这是您从JsonUtility.ToJson()中得到的代码>是正确的。错误更可能是在JavaScript端处理JSON的方式中此{“Type”:0,“Str”:“AAA”,“Byte”:[0]}
已经是正确的JSON格式了。。。这{Type:0,Str:'AAA',Byte:[0]}
不是!JSON中的字段名总是包装在“
中,我想我现在理解得更清楚了,只是编辑了我的问题。以前,我使用了“Application.ExternalEval()”解决方案,效果很好。当我尝试遵循新的Unity3D结构时,它不起作用……感谢您建议的工具。但是,我无法在我的项目中使用太多第三方插件。