当前位置: 首页 > 实用文档 > 知识 > json数据格式化

json数据格式化

2015-12-17 09:47:50 编辑: 来源:http://www.chinazhaokao.com 成考报名 浏览:

导读: json数据格式化篇一《Json format》 ...

json数据格式化篇一
《Json format》



jason数据格式介绍

JSON是 JavaScript Object Notation的简称,是一种轻量的数据表示方法。jason格式采用key:value的方式记录数据,非常直观,比XML简洁,因而大受欢迎 介绍jason格式前,先让我们看看XML格式。显然,XML 得到了相当多的关注(正面和负面的评价都有),已经在 ajax 应用程序中广泛使用:

Brett McLaughlin brett@newInstance.com

这里的数据与前面看到的相同,但是这一次采用 XML 格式。这没什么了不起的;这只是另一种数据格式,使我们能够使用 XML 而不是纯文本和名称/值对。 本文讨论另一种数据格式,JavaScript Object Notation(JSON)。JSON 看起来既熟悉又陌生。它提供了另一种选择,选择范围更大总是好事情。

添加 JSON

在使用名称/值对或 XML 时,实际上是使用 JavaScript 从应用程序中取得数据并将数据转换成另一种数据格式。在这些情况下,JavaScript 在很大程度上作为一种数据操纵语言,用来移动和操纵来自 web 表单的数据,并将数据转换为一种适合发送给服务器端程序的格式。

但是,有时候 JavaScript 不仅仅作为格式化语言使用。在这些情况下,实际上使用 JavaScript 语言中的对象来表示数据,而不仅是将来自 Web 表单的数据放进请求中。在这些情况下,从 JavaScript 对象中提取数据,然后再将数据放进名称/值对或 XML,就有点儿多此一举 了。这时就合适使用 JSON:JSON 允许轻松地将 JavaScript 对象转换成可以随请求发送的数据(同步或异步都可以)。

JSON 并不是某种魔弹;但是,它对于某些非常特殊的情况是很好的选择。 JSON 基础

简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪(稍后会看到几个示例),但是 JavaScript 很容易解释它,而且 JSON 可以表示比名称/值对更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。 简单 JSON 示例

按照最简单的形式,可以用下面这样的 JSON 表示名称/值对:

{ "firstName": "Brett" }

这个示例非常基本,而且实际上比等效的纯文本名称/值对占用更多的空间: firstName=Brett

但是,当将多个名称/值对串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个名称/值对的记录,比如:

{ "firstName": "Brett", "lastName":"McLaughlin", "email":

"brett@newInstance.com" }

从语法方面来看,这与名称/值对相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。

值的数组

当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。例如,假设您希望表示一个人名列表。在 XML 中,需要许多开始标记和结束标记;如果使用典型的名称/值对(就像在本系列前面文章中看到的那种名称/值对),那么必须建立一种专有的数据格式,或者将键名称修改为 person1-firstName 这样的形式。

如果使用 JSON,就只需将多个带花括号的记录分组在一起:

{ "people": [ { "firstName": "Brett", "lastName":"McLaughlin", "email":

"brett@newInstance.com" }, { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" }, { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }]}

这不难理解。在这个示例中,只有一个名为 people 的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。上面的示例演示如何用括号将记录组合成一个值。当然,可以使用相同的语法表示多个值(每个值包含多个记录):

{ "programmers": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }, { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" }, { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" } ],"authors": [ { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" }, { "firstName": "Tad", "lastName":

"Williams", "genre": "fantasy" }, { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" } ],"musicians": [ { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" }, { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" } ]}

这里最值得注意的是,能够表示多个值,每个值进而包含多个值。但是还应该注意,在不同的主条目(programmers、authors 和 musicians)之间,记录中实际的名称/值对可以不一样。JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式。

在处理 JSON 格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表示数据的方式,甚至可以以不同方式表示同一事物。

在 JavaScript 中使用 JSON

掌握了 JSON 格式之后,在 JavaScript 中使用它就很简单了。JSON 是

JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。

将 JSON 数据赋值给变量

例如,可以创建一个新的 JavaScript 变量,然后将 JSON 格式的数据字符串直接赋值给它:

var people = { "programmers": [ { "firstName": "Brett",

"lastName":"McLaughlin", "email": "brett@newInstance.com" }, { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" }, { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" } ], "authors":

[ { "firstName": "Isaac", "lastName": "Asimov", "genre": "science

fiction" }, { "firstName": "Tad", "lastName": "Williams", "genre":

"fantasy" }, { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" } ], "musicians": [ { "firstName": "Eric", "lastName": "Clapton",

"instrument": "guitar" }, { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" } ] }

这非常简单;现在 people 包含前面看到的 JSON 格式的数据。但是,这还不够,因为访问数据的方式似乎还不明显。

访问数据

尽管看起来不明显,但是上面的长字符串实际上只是一个数组;将这个数组放进 JavaScript 变量之后,就可以很轻松地访问它。实际上,只需用点号表示法来表示数组元素。所以,要想访问 programmers 列表的第一个条目的姓氏,只需在 JavaScript 中使用下面这样的代码:

people.programmers[0].lastName;

注意,数组索引是从零开始的。所以,这行代码首先访问 people 变量中的数据;然后移动到称为 programmers 的条目,再移动到第一个记录([0]);最后,访问 lastName 键的值。结果是字符串值 “McLaughlin”。

下面是使用同一变量的几个示例。

people.authors[1].genre // Value is "fantasy"

people.musicians[3].lastName // Undefined. This refers to the fourth entry, and there isn't one people.programmers.[2].firstName // Value is "Elliotte"

利用这样的语法,可以处理任何 JSON 格式的数据,而不需要使用任何额外的 JavaScript 工具包或 API。

修改 JSON 数据

正如可以用点号和括号访问数据,也可以按照同样的方式轻松地修改数据: people.musicians[1].lastName = "Rachmaninov";

在将字符串转换为 JavaScript 对象之后,就可以像这样修改变量中的数据。 转换回字符串

当然,如果不能轻松地将对象转换回本文提到的文本格式,那么所有数据修改都没有太大的价值。在 JavaScript 中这种转换也很简单:

String newJSONtext = people.toJSONString();

这样就行了!现在就获得了一个可以在任何地方使用的文本字符串,例如,可以将它用作 Ajax 应用程序中的请求字符串。

更重要的是,可以将任何 JavaScript 对象转换为 JSON 文本。并非只能处理原来用 JSON 字符串赋值的变量。为了对名为 myObject 的对象进行转换,只需执行相同形式的命令:

String myObjectInJSON = myObject.toJSONString();

这就是 JSON 与本系列讨论的其他数据格式之间最大的差异。如果使用 JSON,只需调用一个简单的函数,就可以获得经过格式化的数据,可以直接使用了。对于其他数据格式,需要在原始数据和格式化数据之间进行转换。即使使用 Document Object Model 这样的 API(提供了将自己的数据结构转换为文本的函数),也需要学习这个 API 并使用 API 的对象,而不是使用原生的 JavaScript 对象和语法。

最终结论是,如果要处理大量 JavaScript 对象,那么 JSON 几乎肯定是一个好选择,这样就可以轻松地将数据转换为可以在请求中发送给服务器端程序的格式。



json数据格式化篇二
《JSON数据格式》



JSON数据格式

理解JSON数据作用

掌握JSON的数据格式

掌握使用JavaScript读取JSON数据方法

JSON是什么

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。

JSON采用完全独立于语言的文本格式,成为理想的数据交换语言。

JSON数据格式

1. “键/值”对的集合。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联 (associative array)。

2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

JSON的具体形式

1、对象是一个无序的“„键/值‟对”集合。一个对象以“{”开始,以“}”结束。每个“名称”后跟一个“:”,“键/值‟对”之间使用“,”分隔。

2、数组是值(value)的有序集合。一个数组以“[”开始,“]”结束。值之间使用“,”分隔。

3、值(value)可以是双引号括起来的字符串(String)、数值(number)、true、false、null、对象(object)或者数组(array)。对象(object)或者数组(array)可以嵌套。

[]

JSON与XML的比较

◆可读性

JSON和XML的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式,很难分出胜负。

◆可扩展性

XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。不过JSON在Javascript主场作战,可以存储Javascript复合对象,有着XML不可比拟的优势。

◆编码难度

XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具。无工具的情况下,相信熟练的开发人员一样能很快的写出想要的xml文档和JSON字符串,不过,xml文档要多很多结构上的字符。

◆解码难度

XML的解析方式有两种:

一是通过文档模型解析,也就是通过父标签索引出一组标记。例如:xmlData.getElementsByTagName("tagName"),但是这样是要在预先知道文档结构的情况下使用,无法进行通用的封装。

另外一种方法是遍历节点(document 以及 childNodes)。这个可以通过递归来实现,不过解析出来的数据仍旧是形式各异,往往也不能满足预先的要求。 凡是这样可扩展的结构数据解析起来一定都很困难。

JSON也同样如此。如果预先知道JSON结构的情况下,使用JSON进行数据传递简直是太美妙了,可以写出很实用美观可读性强的代码。如果你是纯粹的前台开发人员,一定会非常喜欢JSON。但是如果你是一个应用开发人员,就不是那么喜欢了,毕竟xml才是真正的结构化标记语言,用于进行数据传递。

而如果不知道JSON的结构而去解析JSON的话,那简直是噩梦。费时费力不说,代码也会变得冗余拖沓,得到的结果也不尽人意。但是这样也不影响众多前台开发人员选择JSON。因为json.js中的toJSONString()就可以看到JSON的字符串结构。当然不是使用这个字符串,这样仍旧是噩梦。常用JSON的人看到这个字符串之后,就对JSON的结构很明了了,就更容易的操作JSON。

以上是在Javascript中仅对于数据传递的xml与JSON的解析。在Javascript地盘内,JSON毕竟是主场作战,其优势当然要远远优越于xml。如果JSON中存储Javascript复合对象,而且不知道其结构的话,我相信很多程序员也一样是哭着解析JSON的。

◆实例比较

XML和JSON都使用结构化方法来标记数据,下面来做一个简单的比较。 用XML表示中国部分省市数据如下:


中国


黑龙江


哈尔滨

大庆






广东


广州

深圳

珠海






台湾


台北

高雄






新疆


乌鲁木齐







用JSON表示如下:

{

{

name:"广东",

citys:{

city:["广州","深圳","珠海"]

}

},

{

name:"台湾",

citys:{

city:["台北","高雄"]

}

},

{

name:"新疆",

citys:{

city:["乌鲁木齐"]

}

}

]

}

编码的可读性,xml有明显的优势,毕竟人类的语言更贴近这样的说明结构。json读起来更像一个数据块,读起来就比较费解了。不过,我们读起来费解的语言,name:"中国", province:[ { }, name:"黑龙江", citys:{ } city:["哈尔滨","大庆"]

恰恰是适合机器阅读,所以通过json的索引.province[0].name就能够读取“黑龙江”这个值。

编码的手写难度来说,xml还是舒服一些,好读当然就好写。不过写出来的字符JSON就明显少很多。去掉空白制表以及换行的话,JSON就是密密麻麻的有用数据,而xml却包含很多重复的标记字符。

var s1="['a','b']";

var arr1=eval(s1);

alert(arr1[1])

var s2='{name:"中国",province:[{name:"黑龙江",citys:{city:["哈尔滨","大庆"]}}]}';

var arr2=eval(s2);

//var s1="['a','b']";

//var arr1=eval(s1);

//alert(arr1[1])

var s2='var addr={name:"中国",province:[{name:"黑龙江",citys:{city:["哈尔滨","大庆"]}}]};';

eval(s2);

alert(addr.name);

alert(addr.province[0].name);

alert(addr.province[0].citys.city[0]);

// var s="[['aa'],['bb']]";

// eval("var arr1="+s);

// alert(arr1[1]);

var s2='{"name":"中国",province:[{name:"黑龙江",citys:["哈尔滨","大庆"]}]}'; eval("var addr="+s2);

alert(addr.name);

alert(addr.province[0].name);

alert(addr.province[0].citys[0]);

作业:

简述JSON的作用

举例说明JSON的数据格式。

JSON权威网站介绍

官方网站:

json数据格式化篇三
《Json数据格式基本讲解》



Json数据格式基本讲解

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。

表示名称 / 值对

按照最简单的形式,可以用下面这样的 JSON 表示"名称 / 值对":

{ "firstName": "Brett" }

这个示例非常基本,而且实际上比等效的纯文本"名称 / 值对"占用更多的空间: firstName=Brett

但是,当将多个"名称 / 值对"串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个"名称 / 值对"的 记录,比如:

{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }

从语法方面来看,这与"名称 / 值对"相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。

上面都是基本知识,下面举例说明吧:

简单 JSON 示例

按照最简单的形式,可以用下面这样的 JSON 表示名称/值对:

{ "Name": "Ed" }

这个示例非常基本,而且实际上比等效的纯文本名称/值对占用更多的空间: Name = Ed

但是,当将多个名称/值对串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个名称/值对的记录,比如:

{ "Name": "Bill", "Birthday":"1989/11/12", "Email": "bill@zte.com" }

从语法方面来看,这与名称/值对相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。

值的数组

当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。例如,假设您希望表示一个人名列表。在 XML 中,需要许多开始标记和结束标记;如果使用典型的名称/值对(就像在本系列前面文章中看到的那种名称/值对),那么必须建立一种专有的数据格式,或者将键名称修改为 person1-firstName 这样的形式。

如果使用 JSON,就只需将多个带花括号的记录分组在一起:

{"people": [ { "Name": "Bill", "Birthday":"1989/11/12", "Email": "bill@zte.com" },

{ "Name": "Biller", "Birthday":"1989/11/12", "Email": "bill@zte.com" }, { "Name": "Aill", "Birthday":"1989/11/13", "Email": "bill@zte.com" }]}

这不难理解。在这个示例中,只有一个名为 people 的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。上面的示例演示如何用括号将记录组合成一个值。当然,可以使用相同的语法表示多个值(每个值包含多个记录):

{ "programmers": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }, { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" }, { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" } ],"authors": [ { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" }, { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" }, { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" } ],"musicians":

[ { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" }, { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" } ]}

这里最值得注意的是,能够表示多个值,每个值进而包含多个值。但是还应该注意,在不同的主条目(programmers、authors 和 musicians)之间,记录中实际的名称/值对可以不一样。JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式。

在处理 JSON 格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表示数据的方式,甚至可以以不同方式表示同一事物。

对于这种数据格式,了解就行了,具体要用时,可以专门再去深入学习。



json数据格式化篇四
《JSon数据格式》



JSON 入门指南

---Jackie-王桂平

JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。本文将快速讲解 JSON 格式,并通过代码示例演示如何分别在客户端和服务器端进行 JSON 格式数据的处理。

尽管有许多宣传关于 XML 如何拥有跨平台,跨语言的优势,然而,除非应用于 Web Services,否则,在普通的 Web 应用中,开发者经常为 XML 的解析伤透了脑筋,无论是服务器端生成或处理 XML,还是客户端用 JavaScript 解析 XML,都常常导致复杂的代码,极低的开发效率。实际上,对于大多数 Web 应用来说,他们根本不需要复杂的 XML 来传输数据,XML 的扩展性很少具有优势,许多 AJAX 应用甚至直接返回 HTML 片段来构建动态 Web 页面。和返回 XML 并解析它相比,返回 HTML 片段大大降低了系统的复杂性,但同时缺少了一定的灵活性。

现在, JSON 为 Web 应用开发者提供了另一种数据交换格式。让我们来看看 JSON 到底是什么,同 XML 或 HTML 片段相比,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:

["abc",12345,false,null]

Object 对象在 JSON 中是用 {} 包含一系列无序的 Key-Value 键值对表示的,实际上此处的 Object 相当于 Java 中的 Map,而不是 Java 的 Class 。注意 Key 只能用 String 表示。 例如,一个 Address 对象包含如下 Key-Value:

city:Beijing

street:Chaoyang Road

postcode:100025(整数)

用 JSON 表示如下:

{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}

其中 Value 也可以是另一个 Object 或者数组,因此,复杂的 Object 可以嵌套表示,例如,一个 Person 对象包含 name 和 address 对象,可以表示如下:

{"name":"Michael","address":

{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}

}

JavaScript 处理 JSON 数据

上面介绍了如何用 JSON 表示数据,接下来,我们还要解决如何在服务器端生成 JSON 格式的数据以便发送到客户端,以及客户端如何使用 JavaScript 处理 JSON 格式的数据。 我们先讨论如何在 Web 页面中用 JavaScript 处理 JSON 数据。我们通过一个简单的 JavaScript 方法就能看到客户端如何将 JSON 数据表示给用户:

function handleJson() {

var j={"name":"Michael","address":

{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}

};

document.write(j.name);

document.write(j.address.city);

}

假定服务器返回的 JSON 数据是上文的:

{"name":"Michael","address":

{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}

}

只需将其赋值给一个 JavaScript 变量,就可以立刻使用该变量并更新页面中的信息了,相比 XML 需要从 DOM 中读取各种节点而言,JSON 的使用非常容易。我们需要做的仅仅是发送一个 Ajax 请求,然后将服务器返回的 JSON 数据赋值给一个变量即可。有许多 Ajax 框架早已包含了处理 JSON 数据的能力,例如 Prototype(一个流行的 JavaScript 库:evalJSON() 方法,能直接将服务器返回的 JSON 文本变成一个 JavaScript 变量:

new Ajax.Request("{

method: "get",

onSuccess: function(transport) {

var json = transport.responseText.evalJSON();

// TODO: document.write(json.xxx);

}

});

服务器端输出 JSON 格式数据

下面我们讨论如何在服务器端输出 JSON 格式的数据。以 Java 为例,我们将演示将一个 Java 对象编码为 JSON 格式的文本。

将 String 对象编码为 JSON 格式时,只需处理好特殊字符即可。另外,必须用 (") 而非 (') 表示字符串:

static String string2Json(String s) {

StringBuilder sb = new StringBuilder(s.length()+20);

sb.append('\"');

for (int i=0; i

char c = s.charAt(i);

switch (c) {

case '\"':

sb.append("\\\"");

break;

case '\\':

sb.append("\\\\");

break;

case '/':

sb.append("\\/");

break;

case '\b':

sb.append("\\b");

break;

case '\f':

sb.append("\\f");

break;

case '\n':

sb.append("\\n");

break;

case '\r':

sb.append("\\r");

break;

case '\t':

sb.append("\\t");

break;

default:

sb.append(c);

}

}

sb.append('\"');

return sb.toString();

}

将 Number 表示为 JSON 就容易得多,利用 Java 的多态,我们可以处理 Integer,Long,Float 等多种 Number 格式:

static String number2Json(Number number) {

return number.toString();

}

Boolean 类型也可以直接通过 toString() 方法得到 JSON 的表示:

static String boolean2Json(Boolean bool) {

return bool.toString();

}

要将数组编码为 JSON 格式,可以通过循环将每一个元素编码出来:

static String array2Json(Object[] array) {

if (array.length==0)

return "[]";

StringBuilder sb = new StringBuilder(array.length << 4);

sb.append('[');

for (Object o : array) {

sb.append(toJson(o));

sb.append(',');

}

// 将最后添加的 ',' 变为 ']':

sb.setCharAt(sb.length()-1, ']');

return sb.toString();

}

最后,我们需要将 Map 编码为 JSON 格式,因为 JavaScript 的 Object 实际上对应的是 Java 的 Map 。该方法如下:

static String map2Json(Map map) {

if (map.isEmpty())

return "{}";

StringBuilder sb = new StringBuilder(map.size() << 4);

sb.append('{');

Set keys = map.keySet();

for (String key : keys) {

Object value = map.get(key);

sb.append('\"');

sb.append(key);

sb.append('\"');

sb.append(':');

sb.append(toJson(value));

sb.append(',');

}

// 将最后的 ',' 变为 '}':

sb.setCharAt(sb.length()-1, '}');

return sb.toString();

}

为了统一处理任意的 Java 对象,我们编写一个入口方法 toJson(Object),能够将任意的 Java 对象编码为 JSON 格式:

public static String toJson(Object o) {

if (o==null)

return "null";

if (o instanceof String)

return string2Json((String)o);

if (o instanceof Boolean)

return boolean2Json((Boolean)o);

if (o instanceof Number)

return number2Json((Number)o);

if (o instanceof Map)

return map2Json((Map)o);

if (o instanceof Object[])

return array2Json((Object[])o);

throw new RuntimeException("Unsupported type: " + o.getClass().getName()); }

我们并未对 Java 对象作严格的检查。不被支持的对象(例如 List)将直接抛出

RuntimeException 。此外,为了保证输出的 JSON 是有效的,Map 对象的 Key 也不能包含特殊字符。细心的读者可能还会发现循环引用的对象会引发无限递归,例如,精心构造一个循环引用的 Map,就可以检测到 StackOverflowException:

@Test(expected=StackOverflowError.class)

public void testRecurrsiveMap2Json() {

Map map = new HashMap();

map.put("key", map);

JsonUtil.map2Json(map);

}

好在服务器处理的 JSON 数据最终都应该转化为简单的 JavaScript 对象,因此,递归引用的可能性很小。

最后,通过 Servlet 或 MVC 框架输出 JSON 时,需要设置正确的 MIME 类型

(application/json)和字符编码。假定服务器使用 UTF-8 编码,则可以使用以下代码输出编码后的 JSON 文本:

response.setContentType("application/json;charset=UTF-8");

response.setCharacterEncoding("UTF-8");



json数据格式化篇五
《JSON数据格式》



JSON数据格式

理解JSON数据作用

掌握JSON的数据格式

掌握使用JavaScript读取JSON数据方法

JSON是什么

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。

JSON采用完全独立于语言的文本格式,成为理想的数据交换语言。

JSON数据格式

1. “键/值”对的集合。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。

2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

JSON的具体形式

1、对象是一个无序的“„键/值‟对”集合。一个对象以“{”开始,以“}”结束。每个“名称”后跟一个“:”,“键/值‟对”之间使用“,”分隔。

2、数组是值(value)的有序集合。一个数组以“[”开始,“]”结束。值之间使用“,”分隔。

3、值(value)可以是双引号括起来的字符串(String)、数值(number)、true、false、null、对象(object)或者数组(array)。对象(object)或者数组(array)可以嵌套。

[编辑本段]

JSON与XML的比较

◆可读性

JSON和XML的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式,很难分出胜负。

◆可扩展性

XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。不过JSON在Javascript主场作战,可以存储Javascript复合对象,有着XML不可比拟的优势。

◆编码难度

XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具。无工具的情况下,相信熟练的开发人员一样能很快的写出想要的xml文档和JSON字符串,不过,xml文档要多很多结构上的字符。

◆解码难度

XML的解析方式有两种:

一是通过文档模型解析,也就是通过父标签索引出一组标记。例如:xmlData.getElementsByTagName("tagName"),但是这样是要在预先知道文档结构的情况下使用,无法进行通用的封装。

另外一种方法是遍历节点(document 以及 childNodes)。这个可以通过递归来实现,不过解析出来的数据仍旧是形式各异,往往也不能满足预先的要求。 凡是这样可扩展的结构数据解析起来一定都很困难。

JSON也同样如此。如果预先知道JSON结构的情况下,使用JSON进行数据传递简直是太美妙了,可以写出很实用美观可读性强的代码。如果你是纯粹的前台开发人员,一定会非常喜欢JSON。但是如果你是一个应用开发人员,就不是那么喜欢了,毕竟xml才是真正的结构化标记语言,用于进行数据传递。

而如果不知道JSON的结构而去解析JSON的话,那简直是噩梦。费时费力不说,代码也会变得冗余拖沓,得到的结果也不尽人意。但是这样也不影响众多前台开发人员选择JSON。因为json.js中的toJSONString()就可以看到JSON的字符串结构。当然不是使用这个字符串,这样仍旧是噩梦。常用JSON的人看到这个字符串之后,就对JSON的结构很明了了,就更容易的操作JSON。

以上是在Javascript中仅对于数据传递的xml与JSON的解析。在Javascript地盘内,JSON毕竟是主场作战,其优势当然要远远优越于xml。如果JSON中存储Javascript复合对象,而且不知道其结构的话,我相信很多程序员也一样是哭着解析JSON的。

◆实例比较

XML和JSON都使用结构化方法来标记数据,下面来做一个简单的比较。 用XML表示中国部分省市数据如下:


中国


黑龙江


哈尔滨

大庆






广东


广州

深圳

珠海






台湾


台北

高雄






新疆


乌鲁木齐







用JSON表示如下:

{

{

name:"广东",

citys:{

city:["广州","深圳","珠海"]

}

},

{

name:"台湾",

citys:{

city:["台北","高雄"]

}

},

{

name:"新疆",

citys:{

city:["乌鲁木齐"]

}

}

]

}

编码的可读性,xml有明显的优势,毕竟人类的语言更贴近这样的说明结构。json读起来更像一个数据块,读起来就比较费解了。不过,我们读起来费解的语言,name:"中国", province:[ { }, name:"黑龙江", citys:{ } city:["哈尔滨","大庆"]

恰恰是适合机器阅读,所以通过json的索引.province[0].name就能够读取“黑龙江”这个值。

编码的手写难度来说,xml还是舒服一些,好读当然就好写。不过写出来的字符JSON就明显少很多。去掉空白制表以及换行的话,JSON就是密密麻麻的有用数据,而xml却包含很多重复的标记字符。

var s1="['a','b']";

var arr1=eval(s1);

alert(arr1[1])

var s2='{name:"中国",province:[{name:"黑龙江",citys:{city:["哈尔滨","大庆"]}}]}';

var arr2=eval(s2);

//var s1="['a','b']";

//var arr1=eval(s1);

//alert(arr1[1])

var s2='var addr={name:"中国",province:[{name:"黑龙江",citys:{city:["哈尔滨","大庆"]}}]};';

eval(s2);

alert(addr.name);

alert(addr.province[0].name);

alert(addr.province[0].citys.city[0]);

// var s="[['aa'],['bb']]";

// eval("var arr1="+s);

// alert(arr1[1]);

var s2='{"name":"中国",province:[{name:"黑龙江",citys:["哈尔滨","大庆"]}]}'; eval("var addr="+s2);

alert(addr.name);

alert(addr.province[0].name);

alert(addr.province[0].citys[0]);

作业:

简述JSON的作用

举例说明JSON的数据格式。

JSON权威网站介绍

官方网站:

json数据格式化篇六
《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:

用 JSON 表示如下:

其中 Value 也可以是另一个 Object 或者数组,因此,复杂的 Object 可以嵌套表示,例如,一个 Person 对象包含 name 和 address 对象,可以表示如下:

JavaScript 处理 JSON 数据

上面介绍了如何用 JSON 表示数据,接下来,我们还要解决如何在服务器端生成 JSON 格式的数据以便发送到客户端,以及客户端如何使用 JavaScript 处理 JSON 格式的数据。

我们先讨论如何在 Web 页面中用 JavaScript 处理 JSON 数据。我们通过一个简单的 JavaScript 方法就能看到客户端如何将 JSON 数据表示给用户:

假定服务器返回的 JSON 数据是上文的:

只需将其赋值给一个 JavaScript 变量,就可以立刻使用该变量并更新页面中的信息了,相比 XML 需要从 DOM 中读取各种节点而言,JSON 的使用非常容

易。我们需要做的仅仅是发送一个 Ajax 请求,然后将服务器返回的 JSON 数据赋值给一个变量即可。有许多 Ajax 框架早已包含了处理 JSON 数据的能力,例如 Prototype(一个流行的 JavaScript 库:evalJSON() 方法,能直接将服务器返回的 JSON 文本变成一个 JavaScript 变量:

服务器端输出 JSON 格式数据

下面我们讨论如何在服务器端输出 JSON 格式的数据。以 Java 为例,我们将演示将一个 Java 对象编码为 JSON 格式的文本。

将 String 对象编码为 JSON 格式时,只需处理好特殊字符即可。另外,必须用 (") 而非 (') 表示字符串:

将 Number 表示为 JSON 就容易得多,利用

Java 的多态,我们可以处理 Integer,Long,Float 等多种 Number 格式:

Boolean 类型也可以直接通过 toString() 方法得到 JSON 的表示:

要将数组编码为 JSON 格式,可以通过循环将每一个元素编码出来:



json数据格式化篇七
《json数据格式》



1. 什么是 JSON

JSON概念很简单,JSON 是一种轻量级的数据格式,他基于 javascript 语法的子集,即数组和对象表示。由于使用的是 javascript 语法,因此JSON 定义可以包含在javascript 文件中,对其的访问无需通过基于 XML 的语言来额外解析。不过在使用 JSON 之前,很重要的一点是理解 javascript 中数组及对象字面量的特殊语法。

1.1 数组字面量

数组字面量,是用一对方括号括起一组用逗号隔开的 javascript 值,例如:

var aNames=["hello", 12, true , null];

1.2 对象字面量

对象字面量,是通过两个花括号来定义的。在花括号内可以放置任意数量的“名称-值”对,定义格 式字符串值”。除了最后一行外,每个“名称-值”对后必须有一个逗号(这与Perl 中的联合数组的定义有些类似)。例如:

var oCar = {

"color": "red",

"doors" : 4,

"paidFor" : true

};

1.3 混合字面量

我们可以混用对象和数组字面量,来创建一个对象数组,或一个包含数组的对象。例如:

{comments:[

{

id:1,

author:"someone1",

url:"

content:"hello"

},

{

id:2,

author:"someone2",

url:"

content:"hello"

},

{

id:3,

author:"someone3",

url:"

content:"hello"

}

]};

1.4 JSON 语法

在Ajax应用中,就是服务器直接生成javascript语句,客户端获取后直接用eval方法来获得这个对象,这样就可以省去解析XML的性能损失。 同时,在javascript 通信中使用JSON作为数据格式的好处很明星,可以立即获得数据的值,因此可以更快的访问其中包含的数据。

var oCarInfo = eval("(" + sJSON + ")");

请记住:在javascript中花括号也是一个语句。要让解析器知道这个花括号表示的是一个对象而非一个语句的唯一方法是能否找到封装它的圆括号 (它是用来说明代码是一个表达式而非一个语句)。

1.5 JSON 编码和解码

作为 JSON 资源的一部分,Corockford 开发了一个能够实现 JSON 和Javascript 对象直接解码和编码的工具。这个工具的源程序可以在 中下载。

在上面提出用到eval() 存在些固有的不足:它是用来对传入的任何 Javascript 代码求值的,而不仅仅针对JSON。因此,当涉及企业级 web 应用程序开发时,它存在很大的安全隐患。为了解决这个问题,可以使用只用来将 JSON 代码转换为 Javascript 的解析器 JSON.parse() 方法来实现。例如:

var oObject = JSON.parse (sJSON);

同时,它也提供了一种将 Javascript 对象转换为 JSON 字符串(数据传输时使用的)的工具(在

Javascript 中没有内建这种功能支持)。你要做的只是将对象传入到 JSON.Stringify() 方法。请看下面的例子:

var oCar = new Object();

oCar.doors = 4;

oCar.color = "blue";

oCar.year = 1995;

oCar.drivers = new Array("Penny", "Dan" , "Kris");

document.write(JSON.stringify(oCar));

这段代码将输出如下所示的JSON 字符串:

{"doors" : 4, "color" : "blue", "year" :1995, "drivers" : ["Penny", "Dan" , "Kris"]}

2. JSON 与 XML

正如上面所说,JSON 与 XML 相比的一大优点就是它更加简单。

请看 XML 数据表示实例:

使用XML表示:



1

someone1


hello




2

someone2


someone1




3

someone3


hello





使用JSON表示:

{comments:[

{

id:1,

author:"someone1",

url:"

content:"hello"

},

{

id:2,

author:"someone2",

url:"

content:"hello"

},

{

id:3,

author:"someone3",

url:"

content:"hello"

}

]};

很容易发现,许多冗余的信息不见了。由于不需要有与开始标签(opening tag)匹配的结束标签

(closing tag),因此传送相同的信息所需的字节数大大降低了。创始人 Corockford 将其称之为“XML 的减肥方案”)。

JSON 格式的数据与 XML 相比,缺点是对于外行人可读性更差。当然,有一种观点是,数据交换格式不是用肉眼观察的。如果是通过工具对来回传送的数据进行创建和解析,那么的确没有理 由要求数据必须使人们易于阅读。问题的实质在于:存在可用的 JSON 工具。

3. 服务器端 JSON 工具

java :java JSON 工具,由 Douglas Crock ford 开发,可在 中下载,它可以在 JSP 中使用。

4. JSON 优势与缺点

JSON不仅减少了解析XML解析带来的性能问题和兼容性问题,而且对于javascript来说非常容易使用,可以方便的通过遍历数组以及访问对象属性 来获取数据,其可读性也不错,基本具备了结构化数据的性质。不得不说是一个很好的办法,而且事实上google maps就没有采用XML传递数据,而是采用了JSON方案。

JSON 另外一个优势是跨域可行性,例如你在网页里使用是完全可行的,这就意味着你可以跨域传递信息。而使用XMLHttpRequest却获取不了跨域的信息,这是javascript内部的安全 性质所限制的。

JSON看上去很美,是不是就能完全取代XML呢?事实并非如此,而原因就在于XML的优势:通用性。要使服务器端产生语法合格的javascript代 码并不是很容易做到的,这主要发生在比较庞大的系统,服务器端和客户端有不同的开发人员。它们必须协商对象的格式,这很容易造成错误。

无论如何,JSON是一个诱人的技术,准备做一个大量的试用。希望届时可以获取大的性能提高。



json数据格式化篇八
《JSON数据格式》



JSON数据格式

理解JSON数据作用

掌握JSON的数据格式

掌握使用JavaScript读取JSON数据方法

JSON是什么

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。

JSON采用完全独立于语言的文本格式,成为理想的数据交换语言。

JSON数据格式

1. “键/值”对的集合。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。

2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

JSON的具体形式

1、对象是一个无序的“„键/值‟对”集合。一个对象以“{”开始,以“}”结束。每个“名称”后跟一个“:”,“键/值‟对”之间使用“,”分隔。

2、数组是值(value)的有序集合。一个数组以“[”开始,“]”结束。值之间使用“,”分隔。

3、值(value)可以是双引号括起来的字符串(String)、数值(number)、true、false、null、对象(object)或者数组(array)。对象(object)或者数组(array)可以嵌套。

JSON与XML的比较

◆可读性

JSON和XML的可读性可谓不相上下,一边是简易的语法,一边是规范的标签形式,很难分出胜负。

◆可扩展性

XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。不过JSON在Javascript主场作战,可以存储Javascript复合对象,有着XML不可比拟的优势。

◆编码难度

XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具。无工具的情况下,相信熟练的开发人员一样能很快的写出想要的xml文档和JSON字符串,不过,xml文档要多很多结构上的字符。

◆解码难度

XML的解析方式有两种:

一是通过文档模型解析,也就是通过父标签索引出一组标记。例如:

xmlData.getElementsByTagName("tagName"),但是这样是要在预先知道文档结构的情况下使用,无法进行通用的封装。

另外一种方法是遍历节点(document 以及 childNodes)。这个可以通过递归来实现,不过解析出来的数据仍旧是形式各异,往往也不能满足预先的要求。

凡是这样可扩展的结构数据解析起来一定都很困难。

JSON也同样如此。如果预先知道JSON结构的情况下,使用JSON进行数据传递简直是太美妙了,可以写出很实用美观可读性强的代码。如果你是纯粹的前台开发人员,一定会非常喜欢JSON。但是如果你是一个应用开发人员,就不是那么喜欢了,毕竟xml才是真正的结构化标记语言,用于进行数据传递。

而如果不知道JSON的结构而去解析JSON的话,那简直是噩梦。费时费力不说,代码也会变得冗余拖沓,得到的结果也不尽人意。但是这样也不影响众多前台开发人员选择JSON。因为json.js中的toJSONString()就可以看到JSON的字符串结构。当然不是使用这个字符串,这样仍旧是噩梦。常用JSON的人看到这个字符串之后,就对JSON的结构很明了了,就更容易的操作JSON。

以上是在Javascript中仅对于数据传递的xml与JSON的解析。在Javascript地盘内,JSON毕竟是主场作战,其优势当然要远远优越于xml。如果JSON中存储Javascript复合对象,而且不知道其结构的话,我相信很多程序员也一样是哭着解析JSON的。 ◆实例比较

XML和JSON都使用结构化方法来标记数据,下面来做一个简单的比较。 用XML表示中国部分省市数据如下:


中国


黑龙江


哈尔滨

大庆





广东 广州 深圳 珠海 台湾 台北 高雄 新疆 乌鲁木齐 用JSON表示如下: { name:"中国", province:[ { name:"黑龙江", citys:{ city:["哈尔滨","大庆"] } }, { name:"广东", citys:{ city:["广州","深圳","珠海"] } }, { name:"台湾", citys:{ city:["台北","高雄"] } }, { name:"新疆",

citys:{

city:["乌鲁木齐"]

}

}

]

}

编码的可读性,xml有明显的优势,毕竟人类的语言更贴近这样的说明结构。json读起来更像一个数据块,读起来就比较费解了。不过,我们读起来费解的语言,恰恰是适合机器阅读,所以通过json的索引.province[0].name就能够读取“黑龙江”这个值。

编码的手写难度来说,xml还是舒服一些,好读当然就好写。不过写出来的字符JSON就明显少很多。去掉空白制表以及换行的话,JSON就是密密麻麻的有用数据,而xml却包含很多重复的标记字符。

var s1="['a','b']";

var arr1=eval(s1);

alert(arr1[1])

var s2='{name:"中国",province:[{name:"黑龙江",citys:{city:["哈尔滨","大庆"]}}]}';

var arr2=eval(s2);

//var s1="['a','b']";

//var arr1=eval(s1);

//alert(arr1[1])

var s2='var addr={name:"中国",province:[{name:"黑龙江",citys:{city:["哈尔滨","大庆"]}}]};';

eval(s2);

alert(addr.name);

alert(addr.province[0].name);

alert(addr.province[0].citys.city[0]);

// var s="[['aa'],['bb']]";

// eval("var arr1="+s);

// alert(arr1[1]);

var s2='{"name":"中国",province:[{name:"黑龙江",citys:["哈尔滨","大庆"]}]}';

eval("var addr="+s2);

alert(addr.name);

alert(addr.province[0].name);

alert(addr.province[0].citys[0]);



json数据格式化篇九
《不同json数据格式之间的转换》



待转换的json数据格式为:

[{

"id":1,

"text":"菜单",

"children":[{

"id":11,

"text":"菜单1",

"state":"closed",

"children":[{

"id":111,

"text":"测试11",

"attributes":{

"key":"Custom Attribute1"

}

},{

"id":112,

"text":"测试12",

"attributes":{

"key":"xx"

},

},{

"id":113,

"text":"测试13",

"attributes":{

"key":"Custom Attribute1"

}

}]

},{

"id":12,

"text":"菜单2",

"children":[{

"id":121,

"text":"测试21",

"attributes":{

"key":"Custom Attribute1"

}

},{

"id":122,

"text":"测试22",

"attributes":{

"key":"Custom Attribute1"

}

},{

"id":123,

"text":"测试23",

"attributes":{

"key":"Custom Attribute1"

}

}]

}]

}]

该json格式为jQuery easyui tree的json数据格式,先要把它转换成微信自定义菜单的json数据格式,如:

{

"button": [

{

"name": "菜单1",

"sub_button": [

{

"type": "click",

"name": "测试11",

"key": "Custom Attribute1",

"sub_button": [ ]

},

{

"type": "click",

"name": "测试12",

"key": "xx",

"sub_button": [ ]

},

{

"type": "click",

"name": "测试13",

"key": "Custom Attribute1",

"sub_button": [ ]

}

]

},

{

"name": "菜单2",

"sub_button": [

{

"type": "click",

"name": "测试21",

"key": "Custom Attribute1",

"sub_button": [ ]

},

{

"type": "click",

"name": "测试22",

"key": "Custom Attribute1",

"sub_button": [ ]

},

{

"type": "click",

"name": "测试23",

"key": "Custom Attribute1",

"sub_button": [ ]

}

]

}

]

}

所用函数为:

private static void toWeixinMenuJson(JSONObject jsonObject, JSONObject target) {

if (Integer.parseInt(jsonObject.getString("id").toString()) != 1) {

target.put("name", jsonObject.getString("text"));

JSONObject json = null;

json = jsonObject.getJSONObject("attributes");

if (json.size() != 0) {

String url = null;

String key = null;

if (json.containsKey("url")) {

url = json.getString("url");

}

if (json.containsKey("key")) {

key = json.getString("key");

}

if (url != null) {

target.put("type", "view");

target.put("url", url);

}

if (key != null) {

target.put("type", "click");

target.put("key", key);

}

}

}

JSONArray jsonArray = (JSONArray) jsonObject.get("children");

if (jsonArray != null) {

List list = new ArrayList();

Iterator itr = jsonArray.iterator();

while (itr.hasNext()) {

JSONObject jo2 = new JSONObject();

list.add(jo2);

toWeixinMenuJson((JSONObject) itr.next(), jo2);

}

JSONArray ja0 = new JSONArray();

ja0.addAll(list);

if (Integer.parseInt(jsonObject.getString("id").toString()) == 1) {

target.element("button", ja0);

} else {

target.element("sub_button", ja0);

}

}

}

该函数用了递归的思想。

反过来,先要把微信自定义菜单的json数据格式转换成Query easyui tree的json数据格式,可用如下函数,该函数同样用了递归的思想。

private static void toEasyuiTreeJson(JSONObject jsonObject, JSONObject target,int i) { JSONArray array = null;

target.put("id", i);

if (jsonObject.get("button")!=null){

target.put("text", "菜单");

array=jsonObject.getJSONArray("button");

}else{

target.put("text", jsonObject.get("name"));

array=jsonObject.getJSONArray("sub_button");

}

if(jsonObject.containsKey("type")){

String type=jsonObject.getString("type");

JSONObject json=new JSONObject();

if("click".equals(type)){

json.accumulate("key", jsonObject.getString("key"));

}

if("view".equals(type)){

json.accumulate("url", jsonObject.getString("url"));

}

} } if(array!=null){ List list=new ArrayList(); Iterator itr=array.iterator(); while(itr.hasNext()){ JSONObject jObject=new JSONObject(); list.add(jObject); toEasyuiTreeJson((JSONObject)itr.next(), jObject, ++i); } JSONArray array2=new JSONArray(); array2.addAll(list); target.element("children",array2); }



json数据格式化篇十
《json格式数据生成》



json格式数据生成简单格式:JSONStringer可以用来快速构建一个JSON格式的文本,并转换成String,可以写入文件;JSONStringer是JSONWriter的子类;JSONStringer一般通过object().key().value().key().value().endObject()进行构造;object()表明开始一个对象,即添加{ ;endObject()表明结束一个对象,即添加 } ;array()表明开始一个数组,即添加一个 [ ;endArray()表明结束一个数组,即添加一个 ] ;key()表示添加一个key;value()表示添加一个value;简单json数据构建:JSONStringer stringer = new JSONStringer();String str = stringer.object()/*开始对象{*/.key("name")/*添加一个key*/.value("xiazdong")/*添加一个value*/.key("age").value(20).endObject()/*对象添加结束}*/.toString();复杂json数据构建://构建四个json对象JSONStringer js = new JSONStringer(); JSONObject obj2 = new JSONObject(); JSONObject obj3 = new JSONObject(); JSONObject obj4 = new JSONObject(); // "title":"book1",price:$11obj4.put("title","book1").put("price","$11"); // "book":{"title":"book1","price":"$11"}obj3.put("book", obj4); // "author":{"name":"author-1"}obj3.put("author", new JSONObject().put("name", "author-1")); JSONObject obj5 = new JSONObject(); JSONObject obj6 = new JSONObject(); obj6.put("title", "book2").put("price", "$22"); obj5.put("book", obj6); obj5.put("author", new JSONObject().put("name", "author-2")); JSONArray obj7 = new JSONArray(); // [{"author:"{"name":"author-1"},{"title":"book1","price":"$11"}}, // {"author:"{"name":"author-2"},{"title":"book2","price":"$22"}}]obj7.put(obj3).put(obj5); obj2.put("title","BOOK"); obj2.put("signing", obj7); js.object().key("session").value(obj2).endObject();


json数据格式化相关热词搜索:json数据格式 json数据 json格式化

最新推荐成考报名

更多
1、“json数据格式化”由中国招生考试网网友提供,版权所有,转载请注明出处。
2、欢迎参与中国招生考试网投稿,获积分奖励,兑换精美礼品。
3、"json数据格式化" 地址:http://www.chinazhaokao.com/zhishi/67258.html,复制分享给你身边的朋友!
4、文章来源互联网,如有侵权,请及时联系我们,我们将在24小时内处理!