JSON

 简单的示例: 

1。var jsonObj={person1:{name:"jack",age:"12"}, 

person2:{name:"kate",age:"23"}, 

person3:{name:"jim",age:"14"} 

}; 

调用JSON对象的属性, 

1)jsonObj.person1.name 

2)jsonObj["person1"].name 

可以通过for循环的方式调用JSON对象中的每一个子对象 

for(var p in jsonStr){ 

//alert(typeof p); alert(p);//返回的是string 

str+=jsonObj[p].name+","+jsonObj[p].age+"<br>"; 

} 



2。var jsonObj2={persons:[{name:"jordan",sex:"m",age:"40"}, 

{name:"bryant",sex:"m",age:"28"}, 

{name:"McGrady",sex:"m",age:"27"} 

]}; 



调用JSON对象的属性, 

1)jsonObj2.persons[0].name; 

2)for循环调用方法, 

var persons=jsonObj2.persons;//返回的值是一个数组object 

for(var i=0;i<persons.length;i++){ 

cur_person=persons; 

str+=cur_person.name+"'sex is "+cur_person.sex+" and age is "+cur_person.age+"<br>"; 

} 

向jsonObj2的persons数组中插入,删除,更新 数据, 

此处,可以利用javascript的Array对象的方法进行操作,如 

var person={name:"yaoMing",sex:"m",age:"26"}; 

jsonObj2.persons.push(person);//数组最后加一条记录 

jsonObj2.persons.pop();//删除最后一项 

jsonObj2.persons.shift();//删除第一项 

jsonObj2.persons.unshift(person);//数组最前面加一条记录 

只要适合Javascript的方法都是可以用在JSON对象的数组中的!所以还有另外的方法splice( )进行crud操作! 

//删除 

jsonObj2.persons.splice(0,1);//开始位置,删除个数 

//替换不删除 

var self={name:"tom",sex:"m",age:"24"}; 

var brother={name:"Mike",sex:"m",age:"29"}; 

jsonObj2.persons.splice(1,0,self,brother);//开始位置,删除个数,插入对象 

//替换并删除 

var self={name:"tom",sex:"m",age:"24"}; 

var brother={name:"Mike",sex:"m",age:"29"}; 

jsonObj2.persons.splice(0,1,self,brother);//开始位置,删除个数,插入对象 



二,知道了在Javascript中JSON的基本操作,但这还不能与后台进行交互,在着之前还需要把它转化为 String! 



方法有两个,1)引入一个方法 : 



function obj2str(o){ 

var r = []; 

if(typeof o =="string") return "\""+o.replace(/([\'\"\\])/g,"\\$1").replace(/(\n)/g,"\\n").replace(/(\r)/g,"\\r").replace(/(\t)/g,"\\t")+"\""; 

if(typeof o == "object"){ 

if(!o.sort){ 

r[0]="{" 

for(var i in o){ 

r[r.length]=i; 

r[r.length]=":"; 

r[r.length]=obj2str(o); 

r[r.length]=","; 

} 

if(!!document.all && !/^\n?function\s*toString\(\)\s*\{\n?\s*\[native code\]\n?\s*\}\n?\s*$/.test(o.toString)){ 

r[r.length]="toString:"+o.toString.toString(); 

r[r.length]=","; 

} 

r[r.length-1]="}" 

}else{ 

r[0]="[" 

for(var i =0;i<o.length;i++){ 

r[r.length]=obj2str(o); 

r[r.length]=","; 

} 

r[r.length-1]="]" 

} 

return r.join(""); 

} 

return o.toString(); 

} 

 

flex  端;  

import com.adobe.serialization.json.JSON;  

   

var json:String=JSON.encode(reslutList.toArray());  

java 端:  

      List list = (List) JSON.parseArray(json, Map.class);  

      Map ds=JSON.parseObject (form,Map.class);  

  

XML虽然强大但有人觉得xml不够简洁,编码和解码也有一定难度,于是21世纪初有人发明了JSON编码,相比xml内容少并且容易阅读,编码解码的难度也比xml简单,因此迅速得到普及成为比xml更加受欢迎的编码格式。JSON编码来源于对数据结构的分析,所有数据结构都可以分为3种基本数据组成单位:

 

第一种类型是标量,也就是一个单独的字符串或数字。

第二种类型是序列,也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组或列表

第三种类型是映射,也就是一个名/值对,又称作关联数组(Object或字典(Dictionary)

 

几乎所有语言都有这三种类型,as3也不例外,这是JSON成为通用的编码格式基础,JSON提出如下规范:

 

1.并列的数据之间用逗号(",")分隔。

2.映射用冒号(":")表示。

3.并列数据的集合(数组)用方括号("[]")表示。

4.映射的集合(对象)用大括号("{}")表示。

 

这符合像c++,java,c#,javascript等常用语言的编写习惯,as3也不例外,例如:

[

  {"姓名":"张三","性别":"男","年纪":28},

  {"姓名":"四凤","性别":女,"年纪":24}

]

{
"backgroundPic":"aaaa",
"mapBounds":{"x":10,"y":20},
"hero":{这里写你的英雄数据},
"secnceVec":[{场景1数据},{场景2数据}...],
"monsterVec":[{怪物1数据},{怪物2数据}...],
"coinVec":[{金币1数据},{金币2数据}...],
"whoYourDadVec":[{无敌药水1数据},{无敌药水2数据}...],
"bouncyPointVec":[{弹簧点1数据},{弹簧点2数据}...]
}

 

 

package gameElements.data

{

        import flash.geom.Point;

 

        /**

         * 一个关卡包含的数据

         * */

        public class Ele_MissionData

        {

                /**

                 * 背景图片

                 * */

                public var backgroundPic:String;

                /**

                 * 地图大小

                 * */

                public var mapBounds:Point;

                /**

                 * 英雄数据

                 * */

                public var hero:Ele_Hero_Data;

                /**

                 * 场景数据

                 * */

                public var secnceVec:Vector.<Ele_Secnce_Data>;

                /**

                 * 怪物数据

                 * */

                public var monsterVec:Vector.<Ele_Monster_Data>;

                /**

                 * 金币数据

                 * */

                public var coinVec:Vector.<Ele_Coin_Data>;

                /**

                 * 无敌药水数据

                 * */

                public var whoYourDadVec:Vector.<Ele_WhosYourDad_Data>;

                /**

                 * 弹簧点数据

                 * */

                public var bouncyPointVec:Vector.<Ele_BouncyPoint_Data>;

        }

}

  这个结构和as3的字面值非常相似,因此使用as3编写JSON有非常大的优势,目前as3中还没有内置JSON编码,需要下载Adobe的JSON工具包,下载完后就可以使用JSON类编码和解码,JSON使用起来也非常简单,它仅包括两个静态方法:JSON.encode(o:Object):StringJSON.decode( s:String, strict:Boolean = true ):*,endode()可以将关联数组、Array转化为字符串,decode()可以将json格式的字符串转化为Object,strict用于严格检查,如果格式不标准会报JSONParseError的错误,下面是使用JSON编码和解码的例子:

<?xml version="1.0" encoding="utf-8"?>

<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"

                       xmlns:s="library://ns.adobe.com/flex/spark"

                       xmlns:mx="library://ns.adobe.com/flex/mx"

                       creationComplete="init()">

    <fx:Script>

        <![CDATA[

             

            import com.adobe.serialization.json.*; 

             

             

            private var jsonStr:String;  

            private var jsonObj:Object;          

             

            private var jsonObj2:Object; 

            private var jsonStr2:String; 

             

            private var jsonObj3:Object;

             

            internal function init():void{ 

                jsonStr =  '{"name":"zhanzhihu","age":22,"gender":"male","arr":[0,1,2,3]}';

                jsonObj = new Object(); 

                jsonObj = com.adobe.serialization.json.JSON.decode(jsonStr);

                trace(jsonObj.name);

                trace(jsonObj.age + 12);

                trace(jsonObj.arr);

                trace(jsonObj["name"]);

                 

                jsonObj2 = new Object(); 

                jsonObj2.firstName = "bill"; 

                jsonObj2.lastName  = "Gate";     

                jsonObj2.com       = "Microsoft"; 

                jsonStr2 = com.adobe.serialization.json.JSON.encode( jsonObj2 ); 

                trace( jsonStr2 );

                 

                getJSON();

            } 

             

            public function getJSON():void{

                var urlLoader:URLLoader = new URLLoader();

                urlLoader.load(new URLRequest( "model/ssss.php"));

                urlLoader.addEventListener(Event.COMPLETE, decodeJSONHandler);

                 

            }

            private var sss:Object=new Object();

             

            private function decodeJSONHandler(event:Event):void{

                var jsonArray:Array = com.adobe.serialization.json.JSON.decode( URLLoader( event.target ).data );

                trace(jsonArray);

                 

                for (var i:int=0; i<jsonArray.length; i++) {

                    trace( jsonArray[i] .firstName);

                }

            }

             

        ]]>

    </fx:Script>

    <fx:Declarations>

        <!-- Place non-visual elements (e.g., services, value objects) here -->

    </fx:Declarations>

</s:WindowedApplication>

  

<?xml version="1.0" encoding="utf-8"?>

<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"

                       xmlns:s="library://ns.adobe.com/flex/spark"

                       xmlns:mx="library://ns.adobe.com/flex/mx"

                       creationComplete="init()">

    <fx:Script>

        <![CDATA[

             

            //import com.adobe.serialization.json.*; 

             

             

            private var jsonStr:String;  

            private var jsonObj:Object;          

             

            private var jsonObj2:Object; 

            private var jsonStr2:String; 

             

            private var jsonObj3:Object;

             

            internal function init():void{ 

                jsonStr =  '{"name":"zhanzhihu","age":22,"gender":"male","arr":[0,1,2,3]}';

                jsonObj = new Object(); 

                //jsonObj = com.adobe.serialization.json.JSON.decode(jsonStr);

                jsonObj = JSON.parse(jsonStr);

                trace(jsonObj.name);

                trace(jsonObj.age + 12);

                trace(jsonObj.arr);

                trace(jsonObj["name"]);

                 

                jsonObj2 = new Object(); 

                jsonObj2.firstName = "bill"; 

                jsonObj2.lastName  = "Gate";     

                jsonObj2.com       = "Microsoft"; 

                //jsonStr2 = com.adobe.serialization.json.JSON.encode( jsonObj2 );

                jsonStr2 = JSON.stringify(jsonObj2);

                trace( jsonStr2 );

                 

            } 

 

             

        ]]>

    </fx:Script>

    <fx:Declarations>

        <!-- Place non-visual elements (e.g., services, value objects) here -->

    </fx:Declarations>

</s:WindowedApplication>

  

ssss.php

1
2
3
[{ "firstName" : "Isaac" , "lastName" : "Asimov" , "genre" : "sciencefiction" },
{ "firstName" : "Tad" , "lastName" : "Williams" , "genre" : "fantasy" },
{ "firstName" : "Frank" , "lastName" : "Peretti" , "genre" : "christianfiction" }]

 

 [SWF] test_json.swf - 2,137,848 bytes after decompression
zhanzhihu
34
0,1,2,3
zhanzhihu
{"lastName":"Gate","firstName":"bill","com":"Microsoft"}
[object Object],[object Object],[object Object]
Isaac
Tad
Frank
[Unload SWF] test_json.swf

 

flex 4.6  默认添加了json:

 

    parse(text:String, reviver:Function = null):Object
[静态] 接受 JSON 格式的字符串并返回表示该值的 ActionScript 对象。
JSON

 

 

 

  stringify(value:Object, replacer:* = null, space:* = null):String
[静态] 返回 JSON 格式的字符串,用于表示 ActionScript 值。

你可能感兴趣的:(json)