当前位置: 首页 > 实用文档 > 知识 > json在线解析器

json在线解析器

2015-12-29 04:03:23 编辑: 来源:http://www.chinazhaokao.com 成考报名 浏览:

导读: json在线解析器篇一《JSON 教程》  ...

json在线解析器篇一
《JSON 教程》

JSON 教程Next PageJSON:JavaScript 对象表示法(JavaScript Object Notation)。JSON 是存储和交换文本信息的语法。类似 XML。JSON 比 XML 更小、更快,更易解析。每一章中用到的实例{"employees": [{ "firstName":"Bill" , "lastName":"Gates" },{ "firstName":"George" , "lastName":"Bush" },{ "firstName":"Thomas" , "lastName":"Carter" }]}这个 employee 对象是包含 3 个员工记录(对象)的数组。什么是 JSON ?•JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)•JSON 是轻量级的文本数据交换格式•JSON 独立于语言 *•JSON 具有自我描述性,更易理解* JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。JSON - 转换为 JavaScript 对象JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。由于这种相似性,无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。=========================================JSON 简介Previous PageNext Page亲自试一试 - 实例通过我们的编辑器,您可以在线编辑 JavaScript 代码,然后通过点击一个按钮来查看结果:<html><body><h2>在 JavaScript 中创建 JSON 对象</h2><p>Name: <span id="jname"></span><br />Age: <span id="jage"></span><br />Address: <span id="jstreet"></span><br />Phone: <span id="jphone"></span><br /></p><script type="text/javascript">var JSONObject= {"name":"Bill Gates","street":"Fifth Avenue New York 666","age":56,"phone":"555 1234567"};document.getElementById("jname").innerHTML=JSONObject.namedocument.getElementById("jage").innerHTML=JSONObject.agedocument.getElementById("jstreet").innerHTML=JSONObject.streetdocument.getElementById("jphone").innerHTML=JSONObject.phone</script></body></html>亲自试一试------------------------------------------------------<html><body><h2>在 JavaScript 中创建 JSON 对象</h2><p>Name: <span id="jname"></span><br />Age: <span id="jage"></span><br />Address: <span id="jstreet"></span><br />Phone: <span id="jphone"></span><br /></p><script type="text/javascript">var JSONObject= {"name":"Bill Gates","street":"Fifth Avenue New York 666","age":56,"phone":"555 1234567"};document.getElementById("jname").innerHTML=JSONObject.namedocument.getElementById("jage").innerHTML=JSONObject.agedocument.getElementById("jstreet").innerHTML=JSONObject.streetdocument.getElementById("jphone").innerHTML=JSONObject.phone</script></body></html>-------------------------------------------------------类似 XML•JSON 是纯文本•JSON 具有“自我描述性”(人类可读)•JSON 具有层级结构(值中存在值)•JSON 可通过 JavaScript 进行解析•JSON 数据

可使用 AJAX 进行传输相比 XML 的不同之处•没有结束标签•更短•读写的速度更快•能够使用内建的 JavaScript eval() 方法进行解析•使用数组•不使用保留字为什么使用 JSON?对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:使用 XML•读取 XML 文档•使用 XML DOM 来循环遍历文档•读取值并存储在变量中使用 JSON•读取 JSON 字符串•用 eval() 处理 JSON 字符串===================================================JSON 语法Previous PageNext PageJSON 语法是 JavaScript 语法的子集。JSON 语法规则JSON 语法是 JavaScript 对象表示法语法的子集。•数据在名称/值对中•数据由逗号分隔•花括号保存对象•方括号保存数组JSON 名称/值对JSON 数据的书写格式是:名称/值对。名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:"firstName" : "John"这很容易理解,等价于这条 JavaScript 语句:firstName = "John"JSON 值JSON 值可以是:•数字(整数或浮点数)•字符串(在双引号中)•逻辑值(true 或 false)•数组(在方括号中)•对象(在花括号中)•nullJSON 对象JSON 对象在花括号中书写:对象可以包含多个名称/值对:{ "firstName":"John" , "lastName":"Doe" }这一点也容易理解,与这条 JavaScript 语句等价:firstName = "John"lastName = "Doe"JSON 数组JSON 数组在方括号中书写:数组可包含多个对象:{"employees": [{ "firstName":"John" , "lastName":"Doe" },{ "firstName":"Anna" , "lastName":"Smith" },{ "firstName":"Peter" , "lastName":"Jones" }]}在上面的例子中,对象 "employees" 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。JSON 使用 JavaScript 语法因为 JSON 使用 JavaScript 语法,所以无需额外的软件就能处理 JavaScript 中的 JSON。通过 JavaScript,您可以创建一个对象数组,并像这样进行赋值:例子var employees = [{ "firstName":"Bill" , "lastName":"Gates" },{ "firstName":"George" , "lastName":"Bush" },{ "firstName":"Thomas" , "lastName": "Carter" }];可以像这样访问 JavaScript 对象数组中的第一项:employees[0].lastName;返回的内容是:Gates可以像这样修改数据:employees[0].lastName = "Jobs";亲自试一试-------------------------------------------<html><body><h2>通过 JSON 字符串来创建对象</h3><p>First Name: <span id="fname"></span></p> <script type="text/javascript">var employees = [{ "firstName":"Bill" , "lastName":"Gates" },{ "firstName":"George" , "lastName":"Bush" },{ "firstName":"Thomas" , "lastName": "Carter" }];employees[1].firstName="Jobs";document.getElementById("fname").innerHTML=employees[1].firstName;</scr

ipt></body></html>-------------------------------------------在下面的章节,您将学到如何把 JSON 文本转换为 JavaScript 对象。JSON 文件•JSON 文件的文件类型是 ".json"•JSON 文本的 MIME 类型是 "application/json"================================================================JSON 使用Previous PageNext Page把 JSON 文本转换为 JavaScript 对象JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。为了更简单地为您讲解,我们使用字符串作为输入进行演示(而不是文件)。JSON 实例 - 来自字符串的对象创建包含 JSON 语法的 JavaScript 字符串:var txt = '{ "employees" : [' +'{ "firstName":"Bill" , "lastName":"Gates" },' +'{ "firstName":"George" , "lastName":"Bush" },' +'{ "firstName":"Thomas" , "lastName":"Carter" } ]}';由于 JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:var obj = eval ("(" + txt + ")");在网页中使用 JavaScript 对象:例子<p>First Name: <span id="fname"></span><br />Last Name: <span id="lname"></span><br /></p><script type="text/javascript">document.getElementById("fname").innerHTML = obj.employees[1].firstNamedocument.getElementById("lname").innerHTML = obj.employees[1].lastName</script>亲自试一试-------------------------------------------------------------<html><body><h2>通过 JSON 字符串来创建对象</h3><p>First Name: <span id="fname"></span><br /> Last Name: <span id="lname"></span><br /> </p> <script type="text/javascript">var txt = '{"employees":[' +'{"firstName":"Bill","lastName":"Gates" },' +'{"firstName":"George","lastName":"Bush" },' +'{"firstName":"Thomas","lastName":"Carter" }]}';var obj = eval ("(" + txt + ")");document.getElementById("fname").innerHTML=obj.employees[1].firstName document.getElementById("lname").innerHTML=obj.employees[1].lastName </script></body></html>------------------------------------------------------------------JSON 解析器提示:eval() 函数可编译并执行任何 JavaScript 代码。这隐藏了一个潜在的安全问题。使用 JSON 解析器将 JSON 转换为 JavaScript 对象是更安全的做法。JSON 解析器只能识别 JSON 文本,而不会编译脚本。在浏览器中,这提供了原生的 JSON 支持,而且 JSON 解析器的速度更快。较新的浏览器和最新的 ECMAScript (JavaScript) 标准中均包含了原生的对 JSON 的支持。Web 浏览器支持 Web 软件支持 •Firefox (Mozilla) 3.5•Internet Explorer 8•Ch

rome•Opera 10•Safari 4•jQuery•Yahoo UI•Prototype•Dojo•ECMAScript 1.5亲自试一试-------------------------------------------------------------<html><body><h2>通过 JSON 字符串来创建对象</h3><p>First Name: <span id="fname"></span><br /> Last Name: <span id="lname"></span><br /> </p> <script type="text/javascript">var txt = '{"employees":[' +'{"firstName":"Bill","lastName":"Gates" },' +'{"firstName":"George","lastName":"Bush" },' +'{"firstName":"Thomas","lastName":"Carter" }]}';obj = JSON.parse(txt);document.getElementById("fname").innerHTML=obj.employees[1].firstName document.getElementById("lname").innerHTML=obj.employees[1].lastName </script></body></html>---------------------------------------------------------------对于较老的浏览器,可使用 JavaScript 库: https://github.com/douglascrockford/JSON-jsJSON 格式最初是由 Douglas Crockford 制定的。

json在线解析器篇二
《JSON解析详细文档》

JSON 的含义?

JSON的全称是JavaScript Object Notation,是一种轻量级的数据交换格式。JSON与XML具有相同的特性,例如易于人编写和阅读,易于机器生成和解析。但是JSON比XML数据传输的有效性要高出很多。JSON完全独立与编程语言,使用文本格式保存。

JSON数据有两种结构:

 

Name-Value 对构成的集合,类似于Java中的Map。 Value的有序列表,类似于Java中的Array。

一个JSON格式的数据示例: {

"Name": "Apple",

"Expiry": "2007/10/11 13:54", "Price": 3.99, "Sizes": [ "Small", "Medium", "Large" ] }

更多关于JSON数据格式的说明参看JSON官方网站:

GWT与JSON

GWT中支持的客户端服务器端方法调用和数据传递的标准格式是RPC。 JSON并不是GWT支持的标准的数据传递格式。那么如何使用JSON来作为GWT的数据传递格式呢?需要以下几步。

第一,引用HTTP和JSON支持。

第二,在客户端创建JSON数据,提交到服务器

第三,在服务器上重写数据格式解析的代码,使之支持JSON格式的数据 第四,在服务器上组织JSON格式的数据,返回给客户端。 第五,客户端解析服务器传回的JSON数据,正确的显示 引用HTTP和JSON支持

找到.gwt.xml文件,在其中的

<inherits name='com.google.gwt.user.User'/> 在之后添加如下的内容:

<inherits name="com.google.gwt.json.JSON"/> <inherits name="com.google.gwt.http.HTTP"/>

其中com.google.gwt.json.JSON指的是要使用JSON,com.google.gwt.http.HTTP值得是通过HTTP调用服务器上的服务方法。

客户端构造JSON数据

客户端需要使用com.google.gwt.json.client包内的类来组装JSON格式的数据,数据格式如下:

数据类型 JSONArray JSONBoolean

说明

JSONValue构成的数组类型

JSON boolean值

访问JSON结构的数据出错的情况下可以抛出此异

JSONException

JSONNull JSONNumber JSONObject

JSON Null根式的数据 JSON Number类型的数据 JSON Object类型的数据

将String格式的JSON数据解析为JSONValue类

JSONParser

型的数据

JSONString JSONValue

JSON String类型的数据 所有JSON类型值的超级类型

组合一个简单的JSON数据:

JSONObject input = new JSONObject(); JSONString value = new JSONString("mazhao"); input.put("name", value);

JSON数据格式为:{name: "mazhao"} 组合一个包含数组类型的复杂JSON数据: JSONObject input = new JSONObject(); JSONString value = new JSONString("mazhao"); input.put("name", value);

JSONArray arrayValue = new JSONArray(); arrayValue.set(0, new JSONString("array item 0")); arrayValue.set(1, new JSONString("array item 1")); arrayValue.set(2, new JSONString("array item 2")); input.put("array", arrayValue);

JSON数据格式为: {name: "mazhao",

array: {"array item 0", "array item 1", "array item 2"}}

注意上述的JSON类型的数据,使用的都是com.google.gwt.json.client包内的类型。这些类型最终会被编译为JavaScript执行。

服务端重写数据解析代码,支持JSON格式的数据

在服务器上,需要使用JSON Java支持类才能将JSON格式的数据转换为各种类型的数据,当然也可以自己写一些解析用的代码。这里我们使用了

怎么解析JSON术诀呢?针对上述中的复杂的JSON数据: {name: "mazhao",

array: {"array item 0", "array item 1", "array item 2"}} 可以使用如下的方式解析:

JSONObject jsonObject = new JSONObject(payload); String name = jsonObject.getString("name");

System.out.println("name is:" + name);

JSONArray jsonArray = jsonObject.getJSONArray("array"); for(int i = 0; i < jsonArray.length(); i++) {

System.out.println("item " + i + " :" + jsonArray.getString(i)); }

其中payload指的是上述的JSON格式的数据。

那么如何写GWT 的Service来得到Payload的数据呢?需要两点,第一,需要建立一个Service类,第二,覆盖父类的processCall方法。

示例代码:

package com.jpleasure.gwt.json.server;

import com.google.gwt.user.client.rpc.SerializationException; import com.google.gwt.user.server.rpc.RemoteServiceServlet; import com.jpleasure.gwt.json.client.HelloWorldService; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;

/**

* Created by IntelliJ IDEA. * User: vaio * Date: 2007-9-4 * Time: 22:08:31

* To change this template use File | Settings | File Templates. */

public class HelloWorldServiceImpl extends RemoteServiceServlet implements HelloWorldService {

public String processCall(String payload) throws SerializationException { try {

JSONObject jsonObject = new JSONObject(payload); String name = jsonObject.getString("name");

System.out.println("name is:" + name);

JSONArray jsonArray = jsonObject.getJSONArray("array"); for(int i = 0; i < jsonArray.length(); i++) {

System.out.println("item " + i + " :" + jsonArray.getString(i)); }

} catch (JSONException e) {

e.printStackTrace(); //To change body of catch statement use File

| Settings | File Templates. }

return "success"; } }

在服务器上组织JSON格式的数据,返回给客户端 同上

客户端解析服务器传回的JSON数据,正确的显示 同上

Struts2返回json需要jsonplugin-0[1].25的

然后我们的配置文件中需要继承json-default

Java代码

1. <?xml version="1.0" encoding="UTF-8" ?> 2. <!DOCTYPE struts PUBLIC

3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

4. "5. 6. 7. 8.

<struts>

<package name="com.action.testJson" extends="json-default" nam

espace="/" >

9. <action name="jsonUser" class="com.action.testJson.JsonAction" method="testUser"> 10. <result type="json"/> 11. </action> 12. <!-- Add actions here --> 13. </package> 14. </struts>

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

json在线解析器篇三
《JSON基础教程》

JSON 教程JSON:JavaScript 对象表示法(JavaScript Object Notation)。 JSON 是存储和交换文本信息的语法。类似 XML。 JSON 比 XML 更小、更快,更易解析。每一章中用到的实例{ "employees": [ { "firstName":"Bill" , "lastName":"Gates" }, { "firstName":"George" , "lastName":"Bush" }, { "firstName":"Thomas" , "lastName":"Carter" } ] }这个 employee 对象是包含 3 个员工记录(对象)的数组。什么是 JSON ?   JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 * JSON 具有自我描述性,更易理解* JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。JSON - 转换为 JavaScript 对象JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。 由于这种相似性,无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。亲自试一试 - 实例通过我们的编辑器,您可以在线编辑 JavaScript 代码,然后通过点击一个按钮来查看结果:<html> <body> <h2>在 JavaScript 中创建 JSON 对象</h2><p> Name: <span id="jname"></span><br />

Age: <span id="jage"></span><br /> Address: <span id="jstreet"></span><br /> Phone: <span id="jphone"></span><br /> </p><script type="text/javascript">var JSONObject= { "name":"Bill Gates", "street":"Fifth Avenue New York 666", "age":56, "phone":"555 1234567"};document.getElementById("jname").innerHTML=JSONObject.name document.getElementById("jage").innerHTML=JSONObject.age document.getElementById("jstreet").innerHTML=JSONObject.street document.getElementById("jphone").innerHTML=JSONObject.phone </script></body> </html>亲自试一试类似 XML    JSON 是纯文本 JSON 具有“自我描述性”(人类可读) JSON 具有层级结构(值中存在值) JSON 可通过 JavaScript 进行解析 JSON 数据可使用 AJAX 进行传输相比 XML 的不同之处     没有结束标签 更短 读写的速度更快 能够使用内建的 JavaScript eval() 方法进行解析 使用数组 不使用保留字

为什么使用 JSON?对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:使用 XML  使用 JSON读取 XML 文档 使用 XML DOM 来循环遍历文档 读取值并存储在变量中 读取 JSON 字符串 用 eval() 处理 JSON 字符串SON 语法是 JavaScript 语法的子集。JSON 语法规则JSON 语法是 JavaScript 对象表示法语法的子集。   数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组JSON 名称/值对JSON 数据的书写格式是:名称/值对。 名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:"firstName" : "John"这很容易理解,等价于这条 JavaScript 语句:firstName = "John"JSON 值JSON 值可以是:     数字(整数或浮点数) 字符串(在双引号中) 逻辑值(true 或 false) 数组(在方括号中) 对象(在花括号中) null

JSON 对象JSON 对象在花括号中书写: 对象可以包含多个名称/值对:{ "firstName":"John" , "lastName":"Doe" }这一点也容易理解,与这条 JavaScript 语句等价:firstName = "John" lastName = "Doe"JSON 数组JSON 数组在方括号中书写: 数组可包含多个对象:{ "employees": [ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ] }在上面的例子中,对象 "employees" 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。JSON 使用 JavaScript 语法因为 JSON 使用 JavaScript 语法,所以无需额外的软件就能处理 JavaScript 中的 JSON。 通过 JavaScript,您可以创建一个对象数组,并像这样进行赋值:例子var employees = [ { "firstName":"Bill" , "lastName":"Gates" }, { "firstName":"George" , "lastName":"Bush" }, { "firstName":"Thomas" , "lastName": "Carter" } ];可以像这样访问 JavaScript 对象数组中的第一项:

employees[0].lastName;返回的内容是:Gates可以像这样修改数据:employees[0].lastName = "Jobs";亲自试一试 在下面的章节,您将学到如何把 JSON 文本转换为 JavaScript 对象。JSON 文件 JSON 文件的文件类型是 ".json" JSON 文本的 MIME 类型是 "application/json"把 JSON 文本转换为 JavaScript 对象JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象, 然后在网页中使用该数据。 为了更简单地为您讲解,我们使用字符串作为输入进行演示(而不是文件)。JSON 实例 - 来自字符串的对象创建包含 JSON 语法的 JavaScript 字符串:var txt = '{ "employees" : [' + '{ "firstName":"Bill" , "lastName":"Gates" },' + '{ "firstName":"George" , "lastName":"Bush" },' + '{ "firstName":"Thomas" , "lastName":"Carter" } ]}';由于 JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。 eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错 误:var obj = eval ("(" + txt + ")");在网页中使用 JavaScript 对象:例子<p> First Name: <span id="fname"></span><br />

json在线解析器篇四
《JSON入门详解》

JSON入门

快速浏览JSON与XML表现形式

假如有一个employee对象,它有“姓、名、员工编号、头衔”等信息,先看看JSON是如何来描述它的:

再来看看XML是如何表示的,请看:

从上面描述看,JSON表示法不正是JavaScript中对象描述的一种方式么?正确,这正是JavaScript中的对象构造的原生代码。既然是原生代码,我们把它转换成JavaScript中的对象,这样我们操作对象就比操作字符串方便多了。

把JSON字符串转换成JavaScript对象:

JSON优缺点

优点:

乍看上去,使用JSON的数据分隔符的优点可能并不那么明显,但存在一个根本性的缘由:它们简化了数据访问。使用这些数据分隔符时, JavaScript引擎对数据结构(如字符串、数组、对象)的内部表示恰好与这些符号相同。

JSON的另一个优点是它的非冗长性。在XML中,打开和关闭标记是必需的,这样才能满足标记的依从性;而在JSON中,所有这些要求只需通过一个简单的括号即可满足。在包含有数以百计字段的数据交换中,传统的XML标记将会延长数据交换时间

此外,JSON受到了擅长不同编程语言的开发人员的青睐。这是因为无论在Haskell中或 Lisp中,还是在更为主流的C#和Java中,开发都可以方便地生成JSON。

不足:

和许多好东西都具有两面性一样,JSON的非冗长性也不例外,为此JSON丢失了XML具有的一些特性。命名空间允许不同上下文中的相同的信息段彼此混合,然而,显然在JSON中已经找不到了命名空间。JSON与XML的另一个差别是属性的差异,由于JSON采用冒号赋值,这将导致当XML转化为 JSON时,在标识符(XML CDATA)与实际属性值之间很难区分谁应该被当作文本考虑。

另外,JSON片段的创建和验证过程比一般的XML稍显复杂。从这一点来看,XML在开发工具方面领先于JSON。

JSON实践

预备知识

动态脚本函数eval ()

eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。它接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则直接返回此值,否则返回undefined。

另外,该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数:

最后,需要特别注意的是对象声明语法“{}”并不能返回一个值,需要用括号括起来才会返回值(括号里的脚本是表达式,有返回值,而不是无返回值的逻辑式,因为大括号里的脚本又可能是表达式,又可能是普通的逻辑表达,所以用小括号括起来后明确的说明是值表达式):

这样的对象声明语句,必须用括号括住,以将其转换为表达式,才能返回其值 。这也是使用JSON来进行Ajax开发的基本原理之一。

现来说说本节的重点,就是在应用eval时,,但很多时候我们可能在调用eval函数的外面使用生成的变量,eval不可能在全局空间内执行,这就给开发带来了不少问题,这该如何作?请看继续往下看吧。

我们先来证实一下eval产生的变量是局部性的,在调用eval函数外是不能访问到此变量的。

另外,eval生成的函数也是局部的,它只能在生成它的函数内使用,出函数域就不能调用的到。

现解释一下:

1、对于IE浏览器,默认已经提供了这样的函数:execScript,用于在全局空间执行代码。

2、对于Firefox浏览器,直接调用eval函数,则在调用者的空间执行;如果调用window.eval则在全局空间执行。

JavaScript中的JSON

我们知道,可以使用eval()方法调用JavaScript的编译器把JSON文本转变成对象。因为JSON是JavaScript的一个确切的子集,编译器可以正确地解析JSON文本,然后生成一个对象结构。

eval函数非常快速。它可以编译执行任何JavaScript程序,因此产生了安全性问题。当使用可信任与完善的源代码时才可以使用eval函数。这样可以更安全的使用JSON解析器。使用XMLHttpRequest的web应用,页面之间的通讯只允许同源,因此是可以信任的。但这却不是完善的。如果服务器没有严谨的JSON编码,或者没有严格的输入验证,那么可能传送包括危险脚本的无效JSON文本。eval函数将执行恶意的脚本。

如果关心安全的话,使用JSON解析器可以防止此类事件。JSON解析器只能辨识

JSON文本,拒绝所有脚本,因此它比较安全,JSON官方网站提供的一个开源的JSON解析器和字符串转换器()。

而JSON的字符串转换器(stringifier)则作相反的工作,它将JavaScript数据结构转换为JSON文本。JSON是不支持循环数据结构的,所以注意不能把循环的结构交给字符串转换器。

Java中的JSON

Java中的JSON解释器官方提供了好几种,我们这里使用的是 包,关于如何使用,请参见另一篇《JSON之org.json包测试》 ,它是基于官方包提供的测试改写而来的。

开始实战

本实例实现了客户端与服务器端通过JSON进行参数的传递与接收,而不是通过原来的XML方式进行通信。页面采用了Prototype的Ajax方式进行异步通信,并采用了官方 进行对象与JSON串的灵活互转。服务器端采用了官方提供 包进行JSON串与Java对象的互转。具体的细节请看代码注释。

客户端实现:

json在线解析器篇五
《测试json解析》

在Java中解析与构造JSON标签: ajaxjsonjavait在这是使用json-lib的程序:import java.util.HashMap;import java.util.Map;import net.sf.json.JSONObject;public class Test {public static void main(String[] args) {String json = "{\"name\":\"reiz\"}";JSONObject jsonObj = JSONObject.fromObject(json);String name = jsonObj.getString("name");jsonObj.put("initial", name.substring(0, 1).toUpperCase());String[] likes = new String[] { "JavaScript", "Skiing", "Apple Pie" };jsonObj.put("likes", likes);Map<String, String> ingredients = new HashMap<String, String>();ingredients.put("apples", "3kg");ingredients.put("sugar", "1kg");ingredients.put("pastry", "2.4kg");ingredients.put("bestEaten", "outdoors");jsonObj.put("ingredients",ingredients);System.out.println(jsonObj);}}这是使用org.json的程序:import java.util.HashMap;import java.util.Map;import org.json.JSONException;import org.json.JSONObject;public class Test {public static void main(String[] args) throws JSONException {String json = "{\"name\":\"reiz\"}";JSONObject jsonObj = new JSONObject(json);String name = jsonObj.getString("name");jsonObj.put("initial", name.substring(0, 1).toUpperCase());String[] likes = new String[] { "JavaScript", "Skiing", "Apple Pie" };jsonObj.put("likes", likes);Map<String, String> ingredients = new HashMap<String, String>();ingredients.put("apples", "3kg");ingredients.put("sugar", "1kg");ingredients.put("pastry", "2.4kg");ingredients.put("bestEaten", "outdoors");jsonObj.put("ingredients", ingredients);System.out.println(jsonObj);System.out.println(jsonObj);}}两者的使用几乎是相同的,但org.json比json-lib要轻量得多,前者没有任何依赖,而后者要依赖ezmorph和commons的lang、logging、beanutils、collections等组件。

json在线解析器篇六
《json数据解析》

JSON:JavaScript Object Notation,但是独立于语言。类似XML,可以用来文本信息的存储和交换。今天只说我学到的JSON在Android平台上的简单用法。例如: {"user":{"id":"1","name":"cyn","psd":"123456"}},这就是一个简单的JSON的写法,如果要再java类中定义这样一个表达式,需要对"这个符号进行转义,就不多说这个了,接下来说下我的内容。分析{"user":{"id":"1","name":"cyn","psd":"123456"}}这个表达式,通过API的解释,我们可以得知JSON的结构:1、JSON表达式定义在一对大括号{}内部,由一对大括号包裹。2、JSON表达式由Name/Value Pairs组成,其中Name的值为不能重复的,不能为空的字符串,Value的值的类型可以有很多,可以是:数字(整数或浮点数)、字符串(在双引号中)、逻辑值(true 或 false)、数组(在方括号中)、对象(在花括号中)、NULL(此处的这个NULL不是指的空,这是JSONObject的一个属性,用来标记某个name没有值)这么多类型的任意的混合,但是value的值不能为null或者无穷大。API中org.json这个包中提供了四个与JSON相关的类和一个Exceptions:JSONArrayJSONObjectJSONStringerJSONTokenerJSONException首先来了解下这几个类的作用。JSONObject类系统中有关JSON定义的基本单元,包含一对儿(Name/Value)映射。对外部请求的响应体现为一个标准的字符串,最外被大括号包裹,其中的Name和Value被冒号”:”分隔例如{"user":"cyn"}。其对于内部行为的操作格式,例如:初始化一个JSONObject实例,引用内部的put()方法添加数值:new JSONObject().put("user", "cyn"),在Key和Value之间是以逗号”,”分隔。API中这个类的方法主要为get,opt,put等,这三个方法的主要作用时获取或添加内容。JSONArray API的解释为一组有序的值的序列。值可以是对象(在花括号中)、其他的数组(在方括号中)、数字(整数或浮点数)、字符串(在双引号中)、逻辑值(true 或 false)、可以为NULL和null,不能为无穷大或其他。JSONStringer这个类可以帮助快速和便捷的创建JSON表达式。其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则创建JSON表达式。每个JSONStringer实体只能对应创建一个JSON表达式。JSONTokener这个类是系统提供的用来把JSON表达式解析成JSONObject或者JSONArray,我们基本上就用到这个类中的构造器和nextValue()这个方法。JSONException:是json.org类抛出的异常信息。下面看一个例子:我们要处理这样的一个JSON表达式: {"user":{"id":"001","name":"cyn","psd":"123456"}}。首先我们使用JSONStringer来定义出这个表达式:简单代码如下:JSONStringer stringer = new JSONStringer();

JSONStringer stringer01 = new JSONStringer();try {//如果构建对象需要首先调用.object(),key用来构建Name,value用来构建value,以endObject()结束构建String s = stringer.object().key("id").value("1").key("name").value("zhang").key("psd").value("123456").endObject().toString();String sesult = stringer01.object().key("user").value(s).endObject().toString();} catch (JSONException e) {e.printStackTrace();}我们得到的result就是构建出的表达式,可以通过下面代码进行解析。JSONObject object = new JSONObject(result);Iterator<String> iterator = object.keys();while (iterator.hasNext()) {JSONObject object01 = (JSONObject) object.get(iterator.next());//names方法可以得到包含所有的name的数组。JSONArray array = object01.names();for (int i = 0; i < array.length(); i++) {String values = (String) object01.get((String) array.get(i));Log.i("values","values");}}还可以用下面这段代码解析的。JSONObject object = (JSONObject)new JSONTokener(result).nextValue();String query = object.getString("user");JSONObject obj = (JSONObject)new JSONTokener(query).nextValue();String id = idobj.getString("id");Log.i("id",id);String name = nameobj.getString("name");Log.i("name",name);String psd = psdobj.getString("psd");Log.i("psd",psd);假设我们要定义这样的一个JSON数组:[12,13,14]简单代码如下:JSONStringer stringer = new JSONStringer();try {//定义数组以array()开始,value()直接定义值,endArray()方法结束定义。String arr = stringer.array().value(12).value(13).value(14).endArray().toString();} catch (JSONException e) {e.printStackTrace();}解析并得到表达式的代码:try {//此处的arr和上段代码的arr相同。array = new JSONArray(arr);for(int i=0;i<array.length();i++){int result = (Integer)array.get(i);Log.i("result", String.valueOf(result));}} catch (JSONException e) {e.printStackTrace();}{"user": {"users": [ {"id":"1","name":"cyn","psd":"123456"}, {"id":"2","name":"cyn01","psd":"111111"} ] } } 定义的代码:JSONStringer stringer01 = new JSONStringer();JSONStringer stringer02 = new JSONStringer();JSONStringer stringer03 = new JSONStringer();JSONStringer stringer04 = new JSONStringer();JSONStringer stringer05 = new JSONStringer();try {String user1 = stringer01.object().key("id").value("1").key("name").value("cyn").key("psd").value("123456").endObject().toString();String user2 = stringer02.object().key("id").value("2").key("name").value("cyn01").key("psd").value\("111111").endObject().toString();String usera

rr = stringer03.array().value(user1).value(user2).endArray().toString();String users = stringer04.object().key("users").value(userarr).endObject().toString();String user = stringer05.object().key("user").value(users).endObject().toString();} catch (JSONException e) {e.printStackTrace();}解析的代码:try {JSONObject object = (JSONObject) new JSONTokener(result).nextValue();JSONObject object01 = (JSONObject) object.get("user");JSONArray array = (JSONArray)object01.get("users");for(int i=0;i<array.length();i++){JSONObject object02 = (JSONObject)array.get(i);JSONArray array01 = object02.names();for(int j=0;j<array01.length();j++){String name = (String)array01.get(j);String res = (String)object02.get(name);Log.v("name", name);Log.v("res", res);}}} catch (JSONException e) {e.printStackTrace();}

json在线解析器篇七
《JSON解析》

1.JSON解析

(1).解析Object之一:

1 {"url":"

解析方法:

1 JSONObject demoJson = new JSONObject(jsonString);

2 String url = demoJson.getString("url");

(2).解析Object之二:

1 {"name":"android","name":"iphone"}

解析方法:

1 JSONObject demoJson = new JSONObject(jsonString);

2 String name = demoJson.getString("name");

3 String version = demoJson.getString("version");

4 System.out.println("name:"+name+",version:"+version);

(3).解析Array之一:

1 {"number":[1,2,3]}

解析方法:

1 JSONObject demoJson = new JSONObject(jsonString);

2 JSONArray numberList = demoJson.getJSONArray("number");

3 for(int i=0; i<numberList.length(); i++){

//因为数组中的类型为int,所以为getInt,其他getString,getLong4 同用

5 System.out.println(numberList.getInt(i));

6 }

(4).解析Array之二:

1 {"number":[[1],[2],[3]]}

解析方法:

1 //嵌套数组遍历

2 JSONObject demoJson = new JSONObject(jsonString);

3 JSONArray numberList = demoJson.getJSONArray("number");

4 for(int i=0; i<numberList.length(); i++){

5 //获取数组中的数组

6 System.out.println(numberList.getJSONArray(i).getInt(0)); 7 }

(5).解析Object和Array:

1 {"mobile":[{"name":"android"},{"name":"iphone"}]}

解析方法:

1 JSONObject demoJson = new JSONObject(jsonString);

2 JSONArray numberList = demoJson.getJSONArray("mobile");

3 for(int i=0; i<numberList.length(); i++){

System.out.println(numberList.getJSONObject(i).getString("nam4 e"));

5 }

所以,我们发现get后面接着的是你想要的得到的结果的类型:getType,这个对理解很有帮助。

(6).使用optType:

上面的例子,使用getType在碰到查找不到节点的时候,会抛出异常。 如果使用optType,找不到节点,则返回null或者默认值。

1 //无url节点,抛出异常

2 String url = demoJson.getString("url");

3 //无url节点,返回空,如果为基本类型,则返回默认值

4 String url = demoJson.optString("url");

(7).UTF-8的BOM头导致解析JSON异常的问题

到json文件保存为utf-8的时候,在windows平台下,会产生bom头"EF BB EF"字节在文本的最前面(需要用十六进制工具打开才能看的到)。

有两种解决方法:

a.使用UltraEdit打开json文件, 另存为的时候,选择格式UTF-8,无BOM头,如果还不行,在用记事本打开,另存为UTF-8下,多试几次就可以了。

b.使用代码处理,截取json主体内容:

1 String jsonString = getJsonString();

jsonString =

2 jsonString.substring(jsonString.indexOf("{"),jsonString.lastIndexOf("}")+1);

2.JSON必知

(1).JSON是一种轻量级的数据交换格式

(2).JSON基于两种数据结构:Object和Array。其中Object是“名称/值”对的集合。

(3).对象:大括号,每一组string-value结合以","分隔,string和value以冒号分隔。

(4).

数组:

(5).string由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。

(6).value可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以

嵌套。

(7).空白可以加入到任何符号之间,包括空格,tab,回车,换行等。 (8).举例:

a.Object实例:

01 {

02 "Image": {

03 "Width": 800,

04 "Height": 600,

05 "Title": "View from 15th Floor",

06 "Thumbnail": {

07 "Url": "08 "Height": 125,

09 "Width": "100"

10 },

11 "IDs": [116, 943, 234, 38793]

12 }

13 }

b.Array实例

:

json在线解析器篇八
《JSON解析范例》

来自Google官方的关于Android的JSON解析示例,如果远程服务器使用了json而不是xml,在Android平台上已经内置的org.json包可以很方便的实现手机客

户端的解析处理。下面分析下这个例子,帮助Android开发者需要有关HTTP通讯、正则表达式、JSON解析、appWidget开发的一些知识

public class WordWidget extends AppWidgetProvider { // appWidget

@Override

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

context.startService(new Intent(context, UpdateService.class)); // 避免ANR,所以Widget中开了个服务

}

public static class UpdateService extends Service {

@Override

public void onStart(Intent intent, int startId) {

// Build the widget update for today

RemoteViews updateViews = buildUpdate(this);

ComponentName thisWidget = new ComponentName(this, WordWidget.class); AppWidgetManager manager = AppWidgetManager.getInstance(this);

manager.updateAppWidget(thisWidget, updateViews);

}

public RemoteViews buildUpdate(Context context) {

// Pick out month names from resources

Resources res = context.getResources();

String[] monthNames = res.getStringArray(R.array.month_names);

Time today = new Time();

today.setToNow();

String pageName = res.getString(R.string.template_wotd_title,

monthNames[today.month], today.monthDay);

RemoteViews updateViews = null;

String pageContent = "";

try {

SimpleWikiHelper.prepareUserAgent(context);

pageContent = SimpleWikiHelper.getPageContent(pageName, false); } catch (ApiException e) {

Log.e("WordWidget", "Couldn't contact API", e);

} catch (ParseException e) {

Log.e("WordWidget", "Couldn't parse API response", e);

}

Pattern pattern = Pattern

.compile(SimpleWikiHelper.WORD_OF_DAY_REGEX); // 正则表达式处理,有关定义见下面的SimpleWikiHelper类

Matcher matcher = pattern.matcher(pageContent);

if (matcher.find()) {

updateViews = new RemoteViews(context.getPackageName(),

R.layout.widget_word);

String wordTitle = matcher.group(1);

updateViews.setTextViewText(R.id.word_title, wordTitle);

updateViews.setTextViewText(R.id.word_type, matcher.group(2)); updateViews.setTextViewText(R.id.definition, matcher.group(3)

.trim());

String definePage = res.getString(R.string.template_define_url,

Uri.encode(wordTitle));

Intent defineIntent = new Intent(Intent.ACTION_VIEW,

Uri.parse(definePage)); // 这里是打开相应的网页,所以Uri是http的url,action是view即打开web浏览器

PendingIntent pendingIntent = PendingIntent.getActivity(

context, 0 /* no requestCode */, defineIntent, 0 /*

* no * flags */); updateViews.setOnClickPendingIntent(R.id.widget, pendingIntent); // 单击Widget打开Activity

} else {

updateViews = new RemoteViews(context.getPackageName(),

R.layout.widget_message);

CharSequence errorMessage = context

.getText(R.string.widget_error);

updateViews.setTextViewText(R.id.message, errorMessage);

}

return updateViews;

}

@Override

public IBinder onBind(Intent intent) {

// We don't need to bind to this service

return null;

}

}

}

有关网络通讯的实体类,以及一些常量定义如下:

public class SimpleWikiHelper {

private static final String TAG = "SimpleWikiHelper";

public static final String WORD_OF_DAY_REGEX "(?s)\\{\\{wotd\\|(.+?)\\|(.+?)\\|([^#\\|]+).*?\\}\\}";

private static final String WIKTIONARY_PAGE "

+ "rvprop=content&format=json%s";

private static final String WIKTIONARY_EXPAND_TEMPLATES "&rvexpandtemplates=true";

private static final int HTTP_STATUS_OK = 200;

private static byte[] sBuffer = new byte[512];

private static String sUserAgent = null;

public static class ApiException extends Exception {

public ApiException(String detailMessage, Throwable throwable) {

super(detailMessage, throwable);

}

public ApiException(String detailMessage) {

super(detailMessage);

}

}

public static class ParseException extends Exception { = = =

public ParseException(String detailMessage, Throwable throwable) {

super(detailMessage, throwable);

}

}

public static void prepareUserAgent(Context context) {

try {

// Read package name and version number from manifest

PackageManager manager = context.getPackageManager();

PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);

sUserAgent = String.format(

context.getString(R.string.template_user_agent),

info.packageName, info.versionName);

} catch (NameNotFoundException e) {

Log.e(TAG, "Couldn't find package information in PackageManager", e); }

}

public static String getPageContent(String title, boolean expandTemplates)

throws ApiException, ParseException {

String encodedTitle = Uri.encode(title);

String expandClause = expandTemplates ? WIKTIONARY_EXPAND_TEMPLATES : "";

String content = getUrlContent(String.format(WIKTIONARY_PAGE,

encodedTitle, expandClause));

try {

JSONObject response = new JSONObject(content);

JSONObject query = response.getJSONObject("query");

JSONObject pages = query.getJSONObject("pages");

JSONObject page = pages.getJSONObject((String) pages.keys().next()); JSONArray revisions = page.getJSONArray("revisions");

JSONObject revision = revisions.getJSONObject(0);

return revision.getString("*");

} catch (JSONException e) {

throw new ParseException("Problem parsing API response", e);

}

}

protected static synchronized String getUrlContent(String url)

throws ApiException {

if (sUserAgent == null) {

throw new ApiException("User-Agent string must be prepared");

}

HttpClient client = new DefaultHttpClient();

HttpGet request = new HttpGet(url);

request.setHeader("User-Agent", sUserAgent); // 设置客户端标识

try {

HttpResponse response = client.execute(request);

StatusLine status = response.getStatusLine();

if (status.getStatusCode() != HTTP_STATUS_OK) {

throw new ApiException("Invalid response from server: "

+ status.toString());

}

HttpEntity entity = response.getEntity();

InputStream inputStream = entity.getContent(); // 获取HTTP返回的数据流

ByteArrayOutputStream content = new ByteArrayOutputStream();

int readBytes = 0;

while ((readBytes = inputStream.read(sBuffer)) != -1) {

content.write(sBuffer, 0, readBytes); // 转化为字节数组流

}

return new String(content.toByteArray()); // 从字节数组构建String

} catch (IOException e) {

throw new ApiException("Problem communicating with API", e);

}

}

}

有关整个每日维基的widget例子比较简单,主要是帮助大家积累常用代码,了解Android平台JSON的处理方式,毕竟很多Server还是Java的。

json在线解析器篇九
《JSON解析》

一个.NET通用JSON解析/构建类的实现(c#)

在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加上JSON序列化特性。本文将试图提供一个高度灵活的JSON通用类型(JsonObject),实现对JSON的解析及序列化。

假设JSON对象内容如下: 隐藏行号 复制代码 ? JSON

1. {

2. orders: {

3. date: '21:31:59',

4. name: 'Xfrog',

5. books: [{

6. name: 'C# 网络核心编程',

7. publish: '2010-3-24'

8. }, {

9. name: 'C#入门经典中文版',

10. publish: '2009-10-16'

11. }]

12. },

13. blog: '

14.}

使用JsonObject来构建,可选择以下三种方式:

方式一:

隐藏行号 复制代码 ? C#

1. //通过标准构造函数

2.

3. JsonObject json = new JsonObject();

4.

5. json["orders"] = new JsonProperty(new JsonObject());

6.

7. json["blog"] = new JsonProperty("

9.

10.JsonObject config = json.Properties<JsonObject>("orders");

11.

12.json["orders"]["date"] = new JsonProperty(DateTime.Now.ToLongTimeString());

13.

14.json["orders"]["name"] = new JsonProperty("Xfrog");

15.

16.json["orders"]["books"] = new JsonProperty();

17.

18.

19.JsonProperty book = json["orders"]["books"].Add(new JsonObject()); 20.

21.book["name"] = new JsonProperty("C# 网络核心编程");

22.

23.book["publish"] = new JsonProperty("2010-3-24");

24.

25.

26.book = json["orders"]["books"].Add(new JsonObject());

27.

28.book["name"] = new JsonProperty("C#入门经典中文版");

29.

30.book["publish"] = new JsonProperty("2009-10-16");

31.

方式二:

隐藏行号 复制代码 ? C#

1. //通过回调函数简化对象的构建

2.

3. JsonObject json2 = new JsonObject((a) =>

5. {

6.

7. a["orders"] = new JsonProperty(new JsonObject((b) =>

8.

9. {

10.

11. b["date"] = new

JsonProperty(DateTime.Now.ToLongTimeString());

12.

13. b["name"] = new JsonProperty("Xfrog");

14.

15. b["books"] = new JsonProperty();

16.

17. b["books"].Add(new JsonObject((c) =>

18.

19. {

20.

21. c["name"] = new JsonProperty("C# 网络核心编程"); 22.

23. c["publish"] = new JsonProperty("2010-3-24");

24.

25. }));

26.

27. b["books"].Add(new JsonObject((c) =>

28.

29. {

30.

31. c["name"] = new JsonProperty("C#入门经典中文版"); 32.

33. c["publish"] = new JsonProperty("2009-10-16");

34.

35. }));

36.

37. }));

38.

39. a["blog"] = new JsonProperty("40.

41.});

42.

方式三: 隐藏行号 复制代码 ? C#

1. //通过字符串构建Json对象

2.

3. JsonObject newObj = new JsonObject(jsonStr);

4.

获取Json对象属性值的方法,也有三种方式: 隐藏行号 复制代码 ? C#

1. //通过泛型函数

2.

3. Console.WriteLine(newObj["orders"].GetValue<JsonObject>()["books"].GetValue<List<JsonProperty>>()[1].GetValue<JsonObject>()["name"].Value);

4.

5. //通过属性类型对应的属性

6.

7. Console.WriteLine(newObj["orders"].Object["books"].Items[1].Object["name"].Value);

8.

9. //如果属性为对象类型,可通过字符串索引简化

10.

11.Console.WriteLine(newObj["orders"]["books"][1]["name"].Value); 12.

直接使用ToString函数,将JsonObject转换为Json字符串: 隐藏行号 复制代码 ? C#

1. String jsonStr = json.ToString();

2.

注意:

我在重载ToString函数时,并没有将字符串转换为JavsScript字符串类型(即对需要转义的字符的处理),当然,要实现也是极其简单的。另外,对于带String参数的ToString,我也为做特殊处理,感兴趣的朋友可自行实现。

json在线解析器篇十
《JSON解析》

(4).数组:

(5).string由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。

(6).value可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。


json在线解析器相关热词搜索:json在线解析 json json在线解析工具

最新推荐成考报名

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