当前位置:文档之家› JSON 之 SuperObject

JSON 之 SuperObject

JSON 之 SuperObject
JSON 之 SuperObject

预习Delphi 2009 中的新功能- JSON (一) : 什么是JSON?

JSON(JavaScript Object Notation) 类似与XML;

虽始于JavaScript, 但被多种语言支持, 它也成了Delphi 2009 的新功能之一.

假如有一段XML:

2 张三99

用json 可以表示为:

{"id":2, "name":"张三", "age":99}

json 在JavaScript 中使用异常方便, 譬如:

//例1:

Data = {"id":2, "name":"张三", "age":99};

str = Data.id; //2

str = https://www.doczj.com/doc/5710385731.html,; //张三

str = Data["name"]; //张三

//例2:

Data = {"id":2, "name":{"FirstName":"张", "LastName":"三"}, "age":99};

str = https://www.doczj.com/doc/5710385731.html,.FirstName; //张

str = Data["name"]["FirstName"]; //张

//例3:

Data =

[

{"name":"张三", "age":9},

{"name":"李四", "age":19},

{"name":"王五", "age":29}

]

str = Data[2].name; //王五

str = Data[2]["name"]; //王五

//例4:

Data = {"name":"张三", "age":19, "like":["游戏","足球"]};

str = Data.like[1]; //足球

str = Data["like"][1]; //足球

本例中的JavaScript 代码也可以在Delphi 中调试, 参见:

https://www.doczj.com/doc/5710385731.html,/del/archive/2008/08/06/1261580.html

json 中:

元素与值用冒号":" 隔开

元素与元素用逗号"," 隔开

{} 之间是一个对象, 对象可以层层嵌套

[] 表示数组, 数组元素用逗号"," 隔开

值可以是string、number、object、array、tr、false、null; 其中string 要使用双引号(也有语言可以用单引号)

string 中可以使用类似C 语言的转义字符

number 可以使用科学计数法

JSON 之SuperObject(1)

一直盼着Delphi 能够直接支持"正则表达式" 与"JSON";

Delphi 2009 刚来的时候, 有了JSON, 但不好, 那时尝试过一点. 这是以前的链接: 什么是JSON?

Delphi 2010 带了两个相关单元: DBXJSON、DBXJSONReflect 貌似很强大, 但主要是给DataSnap 准备的; 尝试了半天, 也很失望: 可能给DataSnap 网络数据传递够用了, 但太简陋了, 好像是没写完, 对中文支持也有问题.

我想不等了, 找第三方吧, 真的找到了惊喜: JSON –SuperObject v1.1(简介、下载), Henri Gourvest 的大作!

里面还有XML 相关的一个单元, 慢慢看吧.

先来个简单测试:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

uses SuperObject;

//SuperObject 提倡使用接口; ParseString 是TSuperObject 类的Class 方法

procedure TForm1.Button1Click(Sender: TObject);

var

jo: ISuperObject;

begin

jo := TSuperObject.ParseString('{"No1":"张三", "No2":"李四"}');

ShowMessage(jo['No1'].AsString); {张三}

end;

//有个共用函数SO, 可方便实现接口

procedure TForm1.Button2Click(Sender: TObject);

var

jo: ISuperObject;

begin

jo := SO('{"No1":"张三", "No2":"李四"}');

ShowMessage(jo['No2'].AsString); //李四

end;

end.

为什么以用接口为主?

我猜是: 一个JSON 对象中可能包含的子对象太多, 用接口释放比较方便, 因为是自动释放;

另外, Delphi 2010 新给的IOUntils 单元的功能是用结构的方式给出, 结构也是自释放的; 自动释放! 这会是个方向吗? 不过这样的确会少写很多代码.

JSON 之SuperObject(2): 构建方式与AsJSon

SuperObject 构建一个JSON 的常用方法: 从字符串、从文件、从流.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

uses SuperObject;

const JsonStr = '{"No1":"张三", "No2":"李四"}';

//从字符串构建

procedure TForm1.Button1Click(Sender: TObject);

var

jo: ISuperObject;

begin

jo := SO(JsonStr);

{或者用使用下面语句, SO 函数就是调用了TSuperObject.ParseString}

//jo := TSuperObject.ParseString(JsonStr);

ShowMessage(jo.AsJSon(Tr, False));

end;

//从文件构建

procedure TForm1.Button2Click(Sender: TObject);

const

path = 'c:\temp\json.txt';

var

jo: ISuperObject;

begin

{产生个测试文件; SuperObject 对中文支持也不太好, 读取它自己保存的文件吧} SO(JsonStr).SaveTo(path); {这就产生并保存了json 文件}

jo := TSuperObject.ParseFile(path);

ShowMessage(jo.AsJSon(Tr, False));

end;

//从流构建

procedure TForm1.Button3Click(Sender: TObject);

var

jo: ISuperObject;

stm: TStream;

b: Byte;

begin

{模拟个测试流; 看看它能接受的编码够原始的, 它存取文件也是如此}

stm := TStringStream.Create('{"No2":"\李\四","No1":"\张\三"}');

jo := TSuperObject.ParseStream(stm);

ShowMessage(jo.AsJSon(Tr, False));

stm.Free;

end;

//AsJSon 的参数

procedure TForm1.Button4Click(Sender: TObject);

var

jo: ISuperObject;

begin

jo := SO(JsonStr);

ShowMessage(jo.AsJSon);

ShowMessage(jo.AsJSon(Tr));

ShowMessage(jo.AsJSon(Tr, False));

ShowMessage(jo.AsJSon(False, False));

end;

end.

JSON 之SuperObject(3): 访问

测试数据提前加入Memo1 中:

{ "name": "张三", /* 注释*/ "age": 33, "sex": tr, "weight": 123.456, "tel": ["86-1111111", "86-2222222"], "addresses":{"address":"A省B市", "pc":"100001"}, "children": [ { "name": "张继", "age": "22", "sex": tr }, { "name": "张承", "age": "11", "sex": false } ] }

代码文件:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Memo1: TMemo;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Button5: TButton;

Button6: TButton;

Button7: TButton;

Button8: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure Button7Click(Sender: TObject);

procedure Button8Click(Sender: TObject); end;

var

Form1: TForm1;

implementation

{$R *.dfm}

uses SuperObject;

//数组式访问

procedure TForm1.Button1Click(Sender: TObject); var

jo: ISuperObject;

begin

jo := SO(Memo1.Text);

ShowMessage(jo['name'].AsString); ShowMessage(jo['age'].AsString); ShowMessage(jo['sex'].AsString); ShowMessage(jo['weight'].AsString); ShowMessage(jo['addresses'].AsString); ShowMessage(jo['tel'].AsString); ShowMessage(jo['children'].AsString);

end;

//指定返回类型

procedure TForm1.Button2Click(Sender: TObject); var

jo: ISuperObject;

s: string;

i: Integer;

d: Dole;

b: Boolean;

begin

jo := SO(Memo1.Text);

s := jo['name'].AsString;

i := jo['age'].AsInteger;

b := jo['sex'].AsBoolean;

d := jo['weight'].AsDole;

ShowMessage(s);

ShowMessage(IntToStr(i));

ShowMessage(BoolToStr(b, Tr));

ShowMessage(FloatToStr(d));

s := jo.S['name'];

i := jo.I['age'];

b := jo.B['sex'];

d := jo.D['weight'];

ShowMessage(s);

ShowMessage(IntToStr(i));

ShowMessage(BoolToStr(b, Tr));

ShowMessage(FloatToStr(d));

{

jo['name'] 是jo.O['name'] 的简化形式, 因为它是类的默认数组; jo.N 类似jo.O, 区别是jo.N 在参数不妥时可返回空;

jo.M 和方法有关, 对象中可嵌入方法.

}

end;

//内嵌对象访问

procedure TForm1.Button3Click(Sender: TObject);

var

jo: ISuperObject;

begin

jo := SO(Memo1.Text);

ShowMessage(jo['addresses.address'].AsString);

ShowMessage(jo['addresses.pc'].AsString);

end;

//TSuperArray

procedure TForm1.Button4Click(Sender: TObject);

var

jo: ISuperObject;

ja: TSuperArray;

begin

jo := SO(Memo1.Text);

ja := jo['tel'].AsArray;

ShowMessage(IntToStr(ja.Length));

ShowMessage(ja[0].AsString);

ShowMessage(ja[1].AsString);

ja := jo['children'].AsArray;

ShowMessage(ja[0]['name'].AsString);

ShowMessage(ja[1]['name'].AsString);

end;

//遍历对象

procedure TForm1.Button5Click(Sender: TObject);

var

item,jo: ISuperObject;

begin

jo := SO(Memo1.Text);

for item in jo do ShowMessage(item.AsJSon(False, False)); end;

//遍历子对象

procedure TForm1.Button6Click(Sender: TObject);

var

item,jo: ISuperObject;

begin

jo := SO(Memo1.Text);

for item in jo['children'] do

ShowMessage(item.AsJSon(False, False));

end;

//使用TSuperAvlEntry 或TSuperTableString 遍历procedure TForm1.Button7Click(Sender: TObject);

var

jo: ISuperObject;

item: TSuperAvlEntry;

begin

jo := SO(Memo1.Text);

for item in jo.AsObject do

ShowMessageFmt('Name: %s; Val: %s', [https://www.doczj.com/doc/5710385731.html,, item.Val.AsString]); end;

//使用TSuperObjectIter 遍历

procedure TForm1.Button8Click(Sender: TObject);

var

jo: ISuperObject;

item: TSuperObjectIter;

begin

jo := SO(Memo1.Text);

if ObjectFindFirst(jo, item) then

repeat

ShowMessageFmt('key: %s; val: %s', [item.key, item.val.AsString]); until not ObjectFindNext(item);

ObjectFindClose(item);

end;

end.

窗体文件:

object Form1: TForm1

Left = 0

Top = 0

Caption = 'Form1'

ClientHeight = 296

ClientWidth = 377

Color = clBtnFace

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -11

https://www.doczj.com/doc/5710385731.html, = 'Tahoma'

Font.Style = []

OldCreateOrder = False

PixelsPerInch = 96

TextHeight = 13

object Memo1: TMemo

Left = 0

Top = 0

Width = 281

Height = 296

Align = alLeft

Lines.Strings = (

'{'

' "name": "'#24352#19977'", /* '#27880#37322' */'

' "age": 33,'

' "sex": tr,'

' "weight": 123.456,'

' "tel": ["86-1111111", "86-2222222"],'

' "addresses":{"address":"A'#30465'B'#24066'", "pc":"100001"},' ' "children": ['

' {'

' "name": "'#24352#32487'",'

' "age": "22",'

' "sex": tr'

' },'

' {'

' "name": "'#24352#25215'",'

' "age": "11",'

' "sex": false'

' }'

' ]'

'}')

ScrollBars = ssBoth

TabOrder = 0

ExplicitHeight = 292

end

object Button1: TButton

Left = 287

Top = 24

Width = 75

Height = 25

Caption = 'Button1'

TabOrder = 1

OnClick = Button1Click

end

object Button2: TButton

Left = 287

Top = 55

Width = 75

Caption = 'Button2' TabOrder = 2

OnClick = Button2Click end

object Button3: TButton Left = 287

Top = 86

Width = 75

Height = 25

Caption = 'Button3' TabOrder = 3

OnClick = Button3Click end

object Button4: TButton Left = 287

Top = 117

Width = 75

Height = 25

Caption = 'Button4' TabOrder = 4

OnClick = Button4Click end

object Button5: TButton Left = 287

Top = 148

Width = 75

Height = 25

Caption = 'Button5' TabOrder = 5

OnClick = Button5Click end

object Button6: TButton Left = 287

Top = 179

Width = 75

Height = 25

Caption = 'Button6' TabOrder = 6

OnClick = Button6Click end

object Button7: TButton

Top = 213

Width = 75

Height = 25

Caption = 'Button7'

TabOrder = 7

OnClick = Button7Click

end

object Button8: TButton

Left = 287

Top = 244

Width = 75

Height = 25

Caption = 'Button8'

TabOrder = 8

OnClick = Button8Click

end

end

JSON 之SuperObject(4): 增、删、改

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

uses SuperObject;

//添加

procedure TForm1.Button1Click(Sender: TObject);

var

jo: ISuperObject;

i: Integer;

begin

jo := TSuperObject.Create;

for i := 0 to 9 do jo.I['N' + IntToStr(i)] := i; ShowMessage(jo.AsJSon(Tr));

for i := 0 to 9 do jo.S['N' + IntToStr(i)] := IntToStr(i); ShowMessage(jo.AsJSon(Tr));

for i := 0 to 9 do jo.B['N' + IntToStr(i)] := Odd(i); ShowMessage(jo.AsJSon(Tr));

for i := 0 to 9 do jo.D['N' + IntToStr(i)] := i / 2; ShowMessage(jo.AsJSon(Tr));

for i := 0 to 9 do jo.O['N' + IntToStr(i)] := SO('{"A":"B"}'); ShowMessage(jo.AsJSon(Tr));

jo.Clear;

ShowMessage(jo.AsJSon(Tr));

end;

//修改与删除

procedure TForm1.Button2Click(Sender: TObject);

var

jo: ISuperObject;

str: string;

begin

jo := SO('{"Name":"张三", "Age":88}');

ShowMessage(jo.AsJSon(False, False));

jo.S['Name'] := '李四';

jo.I['Age'] := 18;

ShowMessage(jo.AsJSon(False, False));

jo.Delete('Age');

ShowMessage(jo.AsJSon(False, False));

jo.D['Size'] := 1.83;

ShowMessage(jo.AsJSon(False, False));

end;

//TSuperArray 的增、删、改与查看

procedure TForm1.Button3Click(Sender: TObject); var

jo,item: ISuperObject;

ja: TSuperArray;

i: Integer;

str: string;

begin

jo := SO('{"爱好":["编程","打球"]}'); ShowMessage(jo.AsJSon(False, False));

jo.A['爱好'].Add(SO('看电视')); ShowMessage(jo.AsJSon(False, False));

ja := jo.A['爱好'];

ja.Add(SO('游泳'));

ShowMessage(jo.AsJSon(False, False));

ja.Insert(0, SO('睡觉'));

ShowMessage(jo.AsJSon(False, False));

ja.Delete(0);

ShowMessage(jo.AsJSon(False, False));

ja.D[0] := 3.14;

ShowMessage(jo.AsJSon(False, False));

ja.O[0] := SO('{}');

ShowMessage(jo.AsJSon(False, False));

str := '';

for i := 0 to ja.Length - 1 do str := Format('%s %s', [str, ja.S[i]]); ShowMessage(Trim(str));

str := '';

for item in jo['爱好'] do str := Format('%s %s', [str, item.AsString]); ShowMessage(Trim(str));

ja.Clear;

ShowMessage(jo.AsJSon(False, False));

end;

end.

JSON 之SuperObject(5): Format 与转义字符

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

uses SuperObject;

//Format

procedure TForm1.Button1Click(Sender: TObject);

var

jo: ISuperObject;

begin

jo := SO('{"Name":"张三", "Age":88, "Tel":["111,222"], "Children":{"Name":"张继"}}'); ShowMessage(jo.Format('姓名: %Name%; 年龄: %Age%'));

ShowMessage(jo.Format('%Tel%; %Tel[0]%; %Tel[1]%'));

ShowMessage(jo.Format('%Children%; %https://www.doczj.com/doc/5710385731.html,%'));

ShowMessage(jo.Format('[Name], [Age]', '[', ']')); {可更换默认的% 标记}

end;

//特殊字符

procedure TForm1.Button2Click(Sender: TObject);

var

jo: ISuperObject;

begin

jo := SO;

{ \u }

jo := SO('"\A\B\C"');

ShowMessage(jo.AsString);

{ \x }

jo := SO('"\x41\x42\x43"');

ShowMessage(jo.AsString);

{ \u 汉字}

jo := SO('"\万\一"');

ShowMessage(jo.AsString);

{ \u 后面的数字可大写}

jo := SO('"\万\一"');

ShowMessage(jo.AsString);

{ \\、\/ }

jo := SO('"A\\B\/C"');

ShowMessage(jo.AsString);

{ \t、\n 还有\b、\f、\r }

jo := SO('"A\tB\nC"');

ShowMessage(jo.AsString);

{ \"" }

jo := SO('"\"ABC\""');

ShowMessage(jo.AsString);

{ null 是JSON 的一种数据类型, 代表空值, 空值也是值的一种}

jo := SO('[1,2,3,null]');

ShowMessage(jo.AsString);

end;

end.

JSON 之SuperObject(6): 方法

SuperObject 的JSON 对象中还可以包含"方法", 这太有意思了; 其方法的格式是: procedure Method(const This, Params: ISuperObject; var Result: ISuperObject);

//另外, 这是其数据类型的枚举:

TSuperType = (stNull, stBoolean, stDole, stInt, stObject, stArray, stString, stMethod);

测试代码:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Keyboard;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

uses SuperObject;

//方法1; 参数列表是规定好的, 但这里没使用参数

procedure Method1(const This, Params: ISuperObject; var Result: ISuperObject);

begin

ShowMessage('Hello');

end;

//方法2; 这里使用了第二个参数; 这里的第二个就是调用时的第一个

procedure Method2(const This, Params: ISuperObject; var Result: ISuperObject);

begin

ShowMessage(Params.AsJSon);

end;

//方法3; 这里使用了第一个参数; 第一个参数值使用时无需传递, 它代表使用方法的对象本身

procedure Method3(const This, Params: ISuperObject; var Result: ISuperObject);

begin

ShowMessage(This.AsJSon);

end;

//方法4; 这里使用了第三个参数; 这是调用时的返回值, 如果不给它赋值, 调用时将无返回值

procedure Method4(const This, Params: ISuperObject; var Result: ISuperObject);

begin

Result := This;

Result.Merge(Params, Tr); {合并}

end;

//第一种使用方法

procedure TForm1.Button1Click(Sender: TObject);

var

jo: ISuperObject;

begin

jo := SO('{"X":"Y"}');

jo.M['jm1'] := @Method1;

jo.M['jm2'] := @Method2;

jo.M['jm3'] := @Method3;

jo.M['jm4'] := @Method4;

jo.call('jm1'); // Hello

jo.call('jm2', SO('{"A":"B"}')); // {"A":"B"}

jo.call('jm2', '{"A":"B"}'); // {"A":"B"}

jo.call('jm3'); // {"X":"Y"}

jo.call('jm4', '{"B":null}');

ShowMessage(jo.AsJSon); // {"X":"Y","B":null} end;

//第二种使用方法

procedure TForm1.Button2Click(Sender: TObject);

var

t,jo: ISuperObject;

begin

jo := SO('{"X":"Y"}');

jo.M['jm1'] := @Method1;

jo.M['jm2'] := @Method2;

jo.M['jm3'] := @Method3;

jo.M['jm4'] := @Method4;

jo['jm1()']; // Hello

jo['jm2(' + '{"A":"B"}' + ')']; // {"A":"B"}

jo['jm2({A:B})']; // {"A":"B"}

jo['jm3()']; // {"X":"Y"}

后台转换JSON数据类型,前台解析JSON数据等等例子总结

后台转换JSON数据类型,前台解析JSON数据等等例子总结 JSON对象: JSONObject obj = new JSONObject(); obj.put("result", 0); obj.put("message", message); return obj.toJSONString(); 前台解析: Success:function(data){ var result = data.result; var message = data.message; } json对象中有json对象的写法: Objstr为一个JSONObject obj的String转换 private String getsuccess(String objstr,int number){ JSONObject obj = new JSONObject(); obj.put("result", 1); obj.put("obj", objstr); obj.put("number", number); return obj.toJSONString(); }

前台解析: Picjson为success返回的data var result = picjson.result; if (result==1) { var objdata = picjson.obj; var data = eval('(' + objdata + ')'); var num = picjson.number; picurl = null; showpiclist(data, num); } else{ alert(picjson.message); picurl = null; } list转成json对象 需要的包: https://www.doczj.com/doc/5710385731.html,mons-lang.jar https://www.doczj.com/doc/5710385731.html,mons-beanutils.jar https://www.doczj.com/doc/5710385731.html,mons-collections.jar https://www.doczj.com/doc/5710385731.html,mons-logging.jar

jQuery+AJAX+JSON

jQuery 1. 什么是jQuery?? jQuery是一个优秀的JavaScript框架,一个轻量级的JavaScript类库。 jQuery的核心理念是Write less,Do more。 使用jQuery可以兼容各种浏览器,方便的处理HTML、Events、动画效果等,并且方便的为网站提供AJAX交互。 2.jQuery的特点: 利用选择器来查找要操作的节点,然后将这些节点封装成一个jQuery对象,通过调用jQuery对象的方法或者属性来实现对底层被封装的节点的操作。 好处:a、兼容性更好;b、代码更简洁 3.编程步骤: step1、使用选择器查找节点 step2、调用jQuery的属性和方法 4.jQuery对象与DOM对象之间的转换 1. 什么是jQuery对象?? jQuery对象是jQuery对底层对象的一个封装,只有创建了这个对象,才能使用类库中提供的方法。 2. DOM对象 ----> jQuery对象 DOM对象向jQuery对象的转变很容易,外面追加$和圆括号即可。 function f( ){ var obj = document.getElementById(‘d1’); //DOM -> jQuery对象

var $obj = $(obj); $obj.html(‘hello jQuery’); } 3. jQuery对象 ----> DOM对象 jQuery对象向DOM对象转化,通过调用get方法加参数值0即可$obj.get(0)。 function f( ){ var $obj = $(‘#d1’); //jQuery对象 -> DOM var obj = $(obj).get (0); obj.innerHTML = ‘hello jQuery’; } 5. jQuery选择器 1. 什么是jQuery选择器?? jQuery选择器是一种类似CSS选择器的特殊说明符号,能够帮助jQuery 定位到要操作的元素上,使用了选择器可以帮助HTML实现内容与行为的分离。只需要在元素上加上Id属性。 2. 选择器的种类 a、基本选择器 #id根据指定的ID匹配一个元素 .class根据指定的类匹配一个元素 element根据的指定的元素名匹配所有的元素

Json数据格式的使用方法入门教程

JSON 数据格式解析 和 XML 一样,JSON 也是基于纯文本的数据格式。由于 JSON 天生是为JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一个复杂的Object 对象。 String,Number 和 Boolean 用 JSON 表示非常简单。例如,用 JSON 表示一个简单的 String “ abc ”,其格式为: "abc" 除了字符 ",\,/ 和一些控制符(\b,\f,\n,\r,\t)需要编码外,其他 Unicode 字符可以直接输出。下图是一个 String 的完整表示结构: 图 1. String 的完整表示结构 一个 Number 可以根据整型或浮点数表示如下:

图 2. Number 的表示结构 这与绝大多数编程语言的表示方法一致,例如: 12345(整数) -3.9e10(浮点数) Boolean 类型表示为 true 或 false 。此外,JavaScript 中的 null 被表示为 null,注意,true、false 和 null 都没有双引号,否则将被视为一个String 。 JSON 还可以表示一个数组对象,使用 [] 包含所有元素,每个元素用逗号分隔,元素可以是任意的 Value,例如,以下数组包含了一个 String,Number,Boolean 和一个 null: Object 对象在 JSON 中是用 {} 包含一系列无序的 Key-Value 键值对表示的,实际上此处的 Object 相当于 Java 中的 Map,而不是Java 的 Class 。注意 Key 只能用 String 表示。 例如,一个 Address 对象包含如下 Key-Value:

Jquery Ajax 异步处理Json数据

啥叫异步,啥叫Ajax.咱不谈啥XMLHTTPRequest.通俗讲异步就是前台页面javascript能调用后台方法.这样就达到了无刷新.所谓的Ajax.这里我们讲二种方法 方法一:(微软有自带Ajax框架) 在https://www.doczj.com/doc/5710385731.html,里微软有自己的Ajax框架.就是在页面后台.cs文件里引入 using System.Web.Services 空间然后定义静态方法(方法前加上 [WebMethod]) [WebMethod] public static string ABC(string ABC) { return ABC; } 好了,现在我们谈谈前台Js怎么处理后台返回的数据吧,可利用Jquery处理返回的纯html,json,Xml等数据.这里我们演示返回返回的数据有string、集合(List<>)、类. 但都返回Json格式(Json轻量级比XML处理起来简单).看看前台是怎么解析这些数据的. 代码如下: 前台页面: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %> 无标题页