- 浏览: 261421 次
- 性别:
- 来自: 大连
文章分类
最新评论
这个例子里做的事情很简单,主要做了两件事:
1 从服务器的php程序里读一个json数据,然后把内容显示出来。
2 把一个数据结构转换为JSON传给服务器。
所谓数据交换,一来一回,这个例子都做了。
首先第一个,写一个最简单的php程序生成json数据。
取名叫test.php
这个程序就是把$arr这个数组变成json格式的数据显示出来。php5以上都支持json_encode,如果是php4需要一个额外的支持程序,可以去json.org找。
第二个php程序是把从unity3d post过去的json数据转成数组使用。取名叫test1.php,也很简单。
在Unity里怎么用呢?也不难,下面是代码,随便取个什么名字都行。我取名叫jsontest.js。
在Start()里,直接用eval把json转成boo.lang.hash格式,取出username,看console的话可以看到显示出了foo,也就是php里面$arr['username']。接着再提交一个username和password,叫hello和world,然后把php获取的反馈显示出来,会看到console里显示了world。
ToJSON()函数是我写的一个简单函数,就是把Boo.lang.hash数组转成json字符串,只能处理一维数组,如果谁有兴趣可以改一下让它支持多维数组。
这样一来,原来我习惯的json数据传输就可以用了,如果熟悉使用json格式的朋友会方便多了,原来习惯使用xml格式的朋友也推荐你研究下这种简单方便的格式,会提高一些程序效率。
呃,论坛在safari下不能用discuz代码模式…code标签只能换用firefox编辑下了……另外tojson那个函数之所以没支持多维数组,主要是不知道在原来ecma的javascript里的undefined这个东西在unity3d里怎么表示…
还是不设置回复可见,大家有人的捧个人场,有花的捧个花场,有分的捧个分场……=。=||
json里要正常传递中文请参考这个贴:
http://web3d.5d6d.com/thread-2217-1-1.html
json里面传中文基本搞定
u3d里面用json的办法参考这个帖子:
http://bbs.vrsh.cn/thread-2095-1-1.html
那个例子有个问题就是,如果你传过来的数据带中文,到了u3d里,执行到
var jsonObj1=eval(getwww.data);
这一步的时候就会出错。原因是unity3d不支持\u转义,而json_encode函数在encode的时候就直接把中文变成了\u1234这种形式。
其实很好解决,echo之前先把转义的字符串变成中文就行了。unity3d不是浏览器,应该调用WWW的时候直接读的二进制数据,所以不会出错。
js_unescape这个函数是我抄来的……简单改了改
需要字体才能显示出中文。另外注意.php文件的编码要设置成utf-8,u3d的js文件编码最好也设置成utf8。
=====
另外,上面链接的那个使用json的方法,对于树形结构同样有效:
比如改成
显示的时候
你会看到aaa显示出来,所以群里说的
例如数据库查询结果,3条记录,每条记录里面包含姓名,性别,年龄。这个json也能取得后返回u3d吗?
是完全可以的,忘了xml吧。不过从u3d传到web上目前我那个代码没实现json树形结构,只能传递1层的,改改应该也可以实现。
1 从服务器的php程序里读一个json数据,然后把内容显示出来。
2 把一个数据结构转换为JSON传给服务器。
所谓数据交换,一来一回,这个例子都做了。
首先第一个,写一个最简单的php程序生成json数据。
取名叫test.php
<?php $arr=array( 'username' => 'foo', 'password' => 'bar' ); echo json_encode($arr); ?>
这个程序就是把$arr这个数组变成json格式的数据显示出来。php5以上都支持json_encode,如果是php4需要一个额外的支持程序,可以去json.org找。
第二个php程序是把从unity3d post过去的json数据转成数组使用。取名叫test1.php,也很简单。
<?php $jsonstring=$_POST["jsonstring"]; $jsondata=json_decode(stripslashes($jsonstring),true); echo $jsondata["password"]; ?>
在Unity里怎么用呢?也不难,下面是代码,随便取个什么名字都行。我取名叫jsontest.js。
var jsonURL="http://localhost/json/test.php"; var jsonURL1="http://localhost/json/test1.php"; function Start(){ //获取json数据的方法 var getwww : WWW = new WWW (jsonURL); yield getwww; var jsonObj1=eval(getwww.data); print (jsonObj1["username"]); //提交JSON数据的方法 var mydata=new Boo.Lang.Hash(); mydata["username"]="hello"; mydata["password"]="world"; //将数据转换为json字符串 var jsonstring=ToJSON(mydata); var form = new WWWForm(); form.AddField("jsonstring", jsonstring); var postwww: WWW = new WWW(jsonURL1, form); yield postwww; print(postwww.data); } /** * 转换JSON */ static function ToJSON(obj){ if (obj==null) return "null"; var results=new Array(); for (var property in obj){ results.push("\""+property.Key+"\" : \""+property.Value+"\""); } return "{"+results.join(" , ")+"}"; }
在Start()里,直接用eval把json转成boo.lang.hash格式,取出username,看console的话可以看到显示出了foo,也就是php里面$arr['username']。接着再提交一个username和password,叫hello和world,然后把php获取的反馈显示出来,会看到console里显示了world。
ToJSON()函数是我写的一个简单函数,就是把Boo.lang.hash数组转成json字符串,只能处理一维数组,如果谁有兴趣可以改一下让它支持多维数组。
这样一来,原来我习惯的json数据传输就可以用了,如果熟悉使用json格式的朋友会方便多了,原来习惯使用xml格式的朋友也推荐你研究下这种简单方便的格式,会提高一些程序效率。
呃,论坛在safari下不能用discuz代码模式…code标签只能换用firefox编辑下了……另外tojson那个函数之所以没支持多维数组,主要是不知道在原来ecma的javascript里的undefined这个东西在unity3d里怎么表示…
还是不设置回复可见,大家有人的捧个人场,有花的捧个花场,有分的捧个分场……=。=||
json里要正常传递中文请参考这个贴:
http://web3d.5d6d.com/thread-2217-1-1.html
json里面传中文基本搞定
u3d里面用json的办法参考这个帖子:
http://bbs.vrsh.cn/thread-2095-1-1.html
那个例子有个问题就是,如果你传过来的数据带中文,到了u3d里,执行到
var jsonObj1=eval(getwww.data);
这一步的时候就会出错。原因是unity3d不支持\u转义,而json_encode函数在encode的时候就直接把中文变成了\u1234这种形式。
其实很好解决,echo之前先把转义的字符串变成中文就行了。unity3d不是浏览器,应该调用WWW的时候直接读的二进制数据,所以不会出错。
js_unescape这个函数是我抄来的……简单改了改
<?php $arr=array( 'username' => '测试', 'password' => 'bar' ); echo js_unescape(json_encode($arr)); function js_unescape($str) { $ret = ''; $len = strlen($str); for ($i = 0; $i < $len; $i++) { if ($str[$i] == '\\' && $str[$i+1] == 'u') { $val = hexdec(substr($str, $i+2, 4)); if ($val < 0x7f) $ret .= chr($val); else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f)); else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f)); $i += 5; } else $ret .= $str[$i]; } return $ret; } ?>
var jsonURL="http://localhost/json/demo.php"; var show; var chineseSkin : GUISkin; function Start(){ //获取json数据的方法 var getwww : WWW = new WWW (jsonURL); yield getwww; print (getwww.data); var jsonObj1=eval(getwww.data); print (jsonObj1["username"]); show=jsonObj1["username"]; } function OnGUI(){ GUI.skin=chineseSkin; GUI.Button(Rect(10,10,100,20),show); }
需要字体才能显示出中文。另外注意.php文件的编码要设置成utf-8,u3d的js文件编码最好也设置成utf8。
=====
另外,上面链接的那个使用json的方法,对于树形结构同样有效:
比如改成
$arr=array( 'username' => '你好', 'password' => 'bar', 'a' => array( "name" => "aaa", "pass" => "bbb" ) );
显示的时候
print (jsonObj1["a"]["name"]);
你会看到aaa显示出来,所以群里说的
例如数据库查询结果,3条记录,每条记录里面包含姓名,性别,年龄。这个json也能取得后返回u3d吗?
是完全可以的,忘了xml吧。不过从u3d传到web上目前我那个代码没实现json树形结构,只能传递1层的,改改应该也可以实现。
发表评论
-
unity Mathf 数学运算(C#)
2013-05-14 15:32 4002Mathf 数学运算Mathf.Abs绝 ... -
Unity3D与VS2008结合
2013-03-07 13:24 2947mono出问题了,打开之后总是没反应,憋的我只能另想办法了,还 ... -
按自身本地坐标移动
2012-11-09 11:10 0transform.Translate( new Vector ... -
Transform.eulerAngles
2012-09-19 11:20 6065eulerAngles的三个变量,x,y,z表示三个绕坐标轴旋 ... -
UNITY3D开发IOS 强制屏幕四个方向不旋转的方法
2012-09-18 13:32 7200void Start () { //纵向 上下 ... -
复杂材质烘焙成一张贴图
2012-09-17 13:34 2393这个脚本可以将复杂的材质,比如有法线贴图的材质进行" ... -
Unity Mathf 数学运算(C#)
2012-09-17 10:27 107477Mathf.Abs绝对值 计算并返回指定参数 f 绝对值。 ... -
xxx.unity3d 这种文件怎么打开呢`
2012-09-03 10:26 0unity3d是在unity编辑器下编辑模型,然后使用unit ... -
unity3d协作过程中svn的使用
2012-06-20 14:42 1513算是从unity3d官方网站上的翻译,如果你没有看到,可以看下 ... -
Unity3D 里的单例模式(转)
2012-05-04 16:15 2218在Unity3D中可以用不同的方法来实现单例,第一种是通常用法 ... -
unity3d换贴图
2012-04-25 11:51 0//换贴图,直接把这段代码加在要换贴图的模型上即可 ... -
unity3d 修改 webplayer 的logo
2012-03-30 13:48 3861经过测试,以下两种方式都是可以的。 第一种,加到<sc ... -
[转载]Unity3d闪烁灯光脚本
2012-03-29 09:05 1807using UnityEngine; using ... -
Unity引擎链接mySQL数据库
2012-03-29 08:58 5014需要unity3d3.5 pro版本,所以先确认自己用的是不是 ... -
unity3d调用外部摄像头
2012-03-26 15:24 0public string deviceName; ... -
天气系统
2012-03-21 08:37 0var lightmapFarsFirst:Texture ... -
Unity3D鼠标响应事件
2012-03-19 10:14 0void OnMouseDrag () { ... -
javaScript改变skybox
2012-03-07 23:38 1060var dayMaterial:Material; va ... -
Unity 3D 入门常见问题
2012-02-29 10:12 3771下面列出了常见的问题. 文档 Unity 手册 -- 包含用 ... -
UNITY3D常用代码
2012-02-28 08:51 001、基本碰撞检测代码 function OnCollis ...
相关推荐
Unity3D中任意类型数据转换成json数据的方法 Posted on 2013年03月20日 by U3d / Unity3D脚本/插件/被围观 275 次
Unity 中通过UnityWebRequest 以POST形式传JSON格式(键值对格式)的参数请求数据。
android使用JSON进行网络数据交换,主要讲述android中用json格式的数据进行网络通信,适合想要提高技术的同学们学习
使用JSON进行网络数据交换 使用JSON进行网络数据交换.doc
unity 自动excel转json插件
unity3d 3.0 之json格式数据处理框架litjson 简单入门教程
android使用JSON进行网络数据交换(服务端、客户端)的实现,详细的有服务端和客服端还有文档说明!
LitJson插件,unity中用于处理json格式的数据,也可以将其他数据处理成json
unity3d Json转换类,很好用大家可以试试.
将VOC格式的数据集转换为COCO格式,xml格式转换成json格式 effcientdet等网络中均可用到
可以把json转换成lua文件放在工程里面 只需要指定文件读取位置 和 存放位置即可
unity3d xml json 读写。 json 将.xml改为.json 即可
要素合集创建要素图层的方式,需要用到json格式的要素,为了方便本地测试,我们可以把geojson和shp格式的要素转换为json格式。
Unity-JSON数据解析器,语言JavaScript,此版本是ALPHA测试版,最新资源下载:http://dev.grumpyferret.com/unity/
//JSON 数据交换格式练习.第一个爬虫练习
aptos 使用JSON模式验证数据并将JSON模式文档转换为不同数据交换格式的工具
android使用JSON进行网络数据交换.docx
android使用JSON进行网络数据交换.pdf