J S O N

JSON 语法

JSON 语法是 JavaScript 语法的子集。

JSON 的语法基本上可以视为 JavaScript 语法的一个子集:

  • 数据使用名/值对表示。
  • 使用大括号保存对象,每个名称后面跟着一个 ':'(冒号),名/值对使用 ,(逗号)分割。
  • 使用方括号保存数组,数组值使用 ,(逗号)分割。

示例

{
    "book": [
        {
            "id":"01",
            "language": "Java",
            "edition": "second",
            "author": "xxx"
        },
        {
            "id":"02",
            "language": "C++",
            "edition": "second",
            "author": "xxx"
        }
    ]
}

JSON 支持以下两种数据结构:

  • 名/值对集合: 这一数据结构由不同的编程语言支持。
  • 有序的值列表: 包括数组,列表,向量或序列等等。

JSON 语法规则

JSON 语法是 JavaScript 对象表示法语法的子集。

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

JSON 名称/值对

JSON 数据的书写格式是:名称/值对。

{ "flag":true }

名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:

"firstName" : "xxx"

JSON 值

JSON 值:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null

JSON 对象

JSON 对象在花括号({})中书写:

对象可以包含多个名称/值对:

{ "x":"xxx" , "y":"yyy" }

JSON 数组

JSON 数组在方括号中书写,数组可包含多个对象:

{   
    "employees": [   
        { "x":"x1" , "y":"y1" },   
        { "x":"x2" , "y":"y2" },   
        { "x":"x3" , "y":"y3" }   
    ]
}

JSON 布尔值

JSON 布尔值可以是 true 或者 false:

{ "flag":true }

JSON null

JSON 可以设置 null 值:

{ "flag":null }

JSON 使用 JavaScript 语法

因为 JSON 使用 JavaScript 语法,所以无需额外的软件就能处理 JavaScript 中的 JSON。

实例

<!DOCTYPE html>
<html>
<body>
    
<p>X: <span id="xxx"></span></p> 

<script>
var X = [
{ "x" : "x1" , "y" : "y1" }, 
{ "x" : "x2" , "y" : "y2" },  
{ "x" : "x3" , "y" : "y3" },  
];
X[1].x="x4";
document.getElementById("xxx").innerHTML=X[1].x;
</script>

</body>
</html>

JSON 文件

  • JSON 文件的文件类型是 ".json"
  • JSON 文本的 MIME 类型是 "application/json"

JSON 使用

JSON经常应用到的场景是:在后台应用程序中将响应数据封装成JSON格式,传到前台页面之后,需要将JSON格式转换为JavaScript对象,然后在网页中使用该数据。

把 JSON 文本转换为 JavaScript 对象

JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。

实例

var txt = '{ "employees" : [' +      
'{ "x":"x1" , "y":"y1" },' +        
'{ "x":"x2" , "y":"y2" },' +       
'{ "x":"x3" , "y":"y3" } ]}';

由于 JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。

eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:

var obj = eval ("(" + txt + ")");

在网页中使用 JavaScript 对象:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSON</title>
</head>
<body>
<p>
    x: <span id="xx"></span><br> 
    y: <span id="yy"></span><br> 
</p> 
<script>
var txt = '{ "employees" : [' +      
'{ "x":"x1" , "y":"y1" },' +        
'{ "x":"x2" , "y":"y2" },' +       
'{ "x":"x3" , "y":"y3" } ]}';

var obj = eval ("(" + txt + ")");

document.getElementById("xx").innerHTML=obj.employees[1].x 
document.getElementById("yy").innerHTML=obj.employees[1].y 
</script>
</body>
</html>

JSONP 教程

Jsonp 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。

为什么我们从不同的域(网站)访问数据需要一个特殊的技术(JSONP )呢?这是因为同源策略。

什么是同源策略?它是由Netscape提出的一个著名的安全策略,现在所有支持 JavaScript 的浏览器都会使用这个策略。

Jsonp 的实现原理是利用 <script> 标签可以获取不同源资源的特点,来达到跨域访问某个资源的目的。

JSONP 应用

1. 服务端JSONP格式数据

如客户想访问 :​

/try/ajax/jsonp.php?jsonp=callbackFunction​。

真正返回到客户端的数据显示为: ​

callbackFunction(["customername1","customername2"])​。

服务端文件jsonp.php代码:

<?php header('Content-type: application/json'); 

$jsoncallback = htmlspecialchars($_REQUEST ['jsoncallback']); 

$json_data = '["customername1","customername2"]'; 

echo $jsoncallback . "(" . $json_data . ")"; ?>

2. 客户端实现 callbackFunction 函数
<script type="text/javascript">
function onCustomerLoaded(result, methodName)
{
    var html = '<ul>';
    for(var i = 0; i < result.length; i++)
    {
        html += '<li>' + result[i] + '</li>';
    }
    html += '</ul>';
    document.getElementById('divCustomers').innerHTML = html;
}
</script>

客户端页面完整代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/xxxx/xhtml" >
<head>
    <title>JSONP 实例</title>
</head>
<body>
    <div id="divCustomers"></div>
    <script type="text/javascript">
        function callbackFunction(result, methodName)
        {
            var html = '<ul>';
            for(var i = 0; i < result.length; i++)
            {
                html += '<li>' + result[i] + '</li>';
            }
            html += '</ul>';
            document.getElementById('divCustomers').innerHTML = html;
        }
    </script>
<script type="text/javascript" src="/try/ajax/jsonp.php?
jsoncallback=callbackFunction"></script>
</body>
</html>

jQuery 使用 JSONP

实例:

<!DOCTYPE html>
<html>
<head>
   <title>JSONP 实例</title>
   <script src="http://apps.bdimg.com/libs/jquery/1.8.3/jquery.js" 
    rel="external nofollow" ></script> 
</head>
<body>
<div id="divCustomers"></div>
<script>
$.getJSON("/try/ajax/jsonp.php?jsoncallback=?", function(data) 
{  
  var html = '<ul>';
    for(var i = 0; i < data.length; i++)
    {
       html += '<li>' + data[i] + '</li>';
    }
  html += '</ul>';
  $('#divCustomers').html(html); 
});
</script>
</body>
</html>

JSON 数据类型

JSON 格式支持以下数据类型:

类型描述
数字型(Number)JavaScript 中的双精度浮点型格式
字符串型(String)双引号包裹的 Unicode 字符和反斜杠转义字符
布尔型(Boolean)true 或 false
数组(Array)有序的值序列
值(Value)字符串,数字,true 或 false,null 等等
对象(Object)无序的键:值对集合
空格(Whitespace)可用于任意符号对之间
null

数字型

  • JavaScript 中的双精度浮点型格式,取决于实现。
  • 不能使用八进制和十六进制格式。
  • 在数字中不能使用 NaN 和 Infinity。
类型描述
整形(Integer)数字1-9,0和正负数
分数(Fraction)分数,比如 0.1
指数(Exponent)指数,比如 e,e+,e-,E,E+,E-

语法:

var json-object-name = { string : number_value, .......}

示例:

var obj = {marks: 100}

字符串型

  • 零个或多个双引号包裹的 Unicode 字符以及反斜杠转义序列。
  • 字符就是只有一个字符的字符串,长度为 1。
类型描述
"双引号
\反斜线
/斜线
b退格符
f换页符
n换行符
r回车符
t水平制表符
u四位十六进制数字

语法:

var json-object-name = { string : "string value", .......}

示例:

var obj = {name: 'xxxx'}

布尔型

包含 true 和 false 。

语法:

var json-object-name = { string : true/false, .......}

示例:

var obj = {name: 'xxx', marks: 22, distinction: true}

数组

  • 有序的值集合。
  • 使用方括号闭合,这意味着数组以 [ 开始,以 ] 结尾。
  • 值使用 ,(逗号)分割。
  • 数组索引可以以 0 或 1 开始。
  • 当键名是连续的整数时应该使用数组。

语法:

[ value, .......]

示例:

{
    "books": [
        { "language":"Java" , "edition":"second" },
        { "language":"C++" , "edition":"second" },
        { "language":"C" , "edition":"second" }
    ]
}

对象

  • 无序的名/值对集合。
  • 对象使用大括号闭合,以 '{' 开始,以 '}' 结尾。
  • 每个名称后面都跟随一个 ':'(冒号),名/值对使用 ,(逗号)分割。
  • 键名必须是字符串,并且不能同名。
  • 当键名是任意字符串时应该使用对象。

语法:

{ string : value, .......}

示例:

{
    "id": "xxxx",
    "language": "JAVA",
    "price": xxx,
}

空格

在任意一对符号之间插入

语法:

{string:"   ",....}

使用空格

var i= "   xxx";

不使用空格

var j = "  xxx"

null

意味着空类型。

语法:

null

示例:

var i = null;

JSON 对象

JSON 对象使用在大括号(​{}​)中书写,对象可以包含多个 key/value(键/值)对。

  • key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。
  • key 和 value 中使用冒号(:)分割。
  • 每个 key/value 对使用逗号(,)分割。

创建简单的对象

JSON 对象可以使用 JavaScript 创建。

创建一个空对象:

var Obj = {};

创建一个新对象:

var Obj = new Object();

创建一个 bookname 属性值为字符串,price属性值为数字的对象。

var Obj = { "bookname ":"xxx", "price":xxx };

可以通过使用 '.' 运算符访问属性。

实例

<html>
<head>
<title>JSON</title>
<script language="javascript" >

    var Obj = { "name" : "xxx", "time"  : xxxx };
    document.write("<h1>JSON和JavaScript的例子</h1>");
    document.write("<h3>名字="+Obj.name+"</h3>");  
    document.write("<h3>时间="+Obj.time+"</h3>");  

</script>
</head>
<body>
</body>
</html>

访问对象值

可以使用点号(.)来访问对象的值:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSON</title>
</head>
<body>

<p id="demo"></p>

<script>

var Obj, x;
Obj = { "name":"xxx", "alexa":1111, "site":null };
x = Obj.name;
document.getElementById("demo").innerHTML = x;

</script>

</body>
</html>

可以使用中括号([])来访问对象的值:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSON</title>
</head>
<body>

<p id="demo"></p>

<script>

var Obj, x;
Obj = Obj = { "name":"xxx", "alexa":222, "site":null };
x = Obj["name"];
document.getElementById("demo").innerHTML = x;

</script>

</body>
</html>

循环对象

使用 for-in 循环对象的属性:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSON</title>
</head>
<body>

<p id="demo"></p>

<script>
var Obj = { "name":"xxx", "price":22, "site":null };
for (x in Obj) 
{
    document.getElementById("demo").innerHTML += x + "<br>";
}
</script>

</body>
</html>

在 for-in 循环对象的属性时,使用中括号([])来访问属性的值:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSON</title>
</head>
<body>

<p id="demo"></p>

<script>
var Obj = { "name":"xxx", "price":22, "site":null };
for (x in Obj) 
{
    document.getElementById("demo").innerHTML += Obj[x] + "<br>";
}
</script>

</body>
</html>

创建数组对象

在 JavaScript 中使用 JSON 创建数组对象

<html>
<head>
<title>JSON</title>
<script language="javascript" >

document.writeln("<h2>JSON数组对象</h2>");

var books = 
{
    "Pascal" : [ 
        { "Name"  : "x1", "price" : 200 },
        { "Name"  : "x2", "price" : 200 }
    ],                       
    "Scala"  : [
        { "Name"  : "x3", "price" : 200 }, 
        { "Name"  : "x4", "price" : 200 }
    ]    
}    

var i = 0
document.writeln("<table border='2'><tr>");
for(i=0;i<books.Pascal.length;i++)
{   
    document.writeln("<td>");
    document.writeln("<table border='1' width=100 >");
    document.writeln("<tr><td><b>Name</b></td><td width=50>"
    + books.Pascal[i].Name+"</td></tr>");
    document.writeln("<tr><td><b>Price</b></td><td width=50>"
    + books.Pascal[i].price +"</td></tr>");
    document.writeln("</table>");
    document.writeln("</td>");
}

for(i=0;i<books.Scala.length;i++)
{
    document.writeln("<td>");
    document.writeln("<table border='1' width=100 >");
    document.writeln("<tr><td><b>Name</b></td><td width=50>"
    + books.Scala[i].Name+"</td></tr>");
    document.writeln("<tr><td><b>Price</b></td><td width=50>"
    + books.Scala[i].price+"</td></tr>");
    document.writeln("</table>");
    document.writeln("</td>");
}
document.writeln("</tr></table>");
</script>
</head>
<body>
</body>
</html>

嵌套 JSON 对象

JSON 对象中可以包含另外一个 JSON 对象:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSON</title>
</head>
<body>

<p id="demo"></p>

<script>
Obj = 
{
	"name":"xxxx",
	"sites": 
	{
		"site1":"www.xxx.cn",
		"site2":"m.xxx.cn",
		"site3":"www.xxx.cn/json/"
	}
}
document.getElementById("demo").innerHTML += Obj.sites.site1 + "<br>";
document.getElementById("demo").innerHTML += Obj.sites["site1"];
</script>

</body>
</html>

修改值

使用点号(.)来修改 JSON 对象的值:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSON</title>
</head>
<body>

<p id="demo"></p>

<script>
var Obj, i, x = "";
Obj = 
{
    "name":"xxx",
    "sites": 
    {
        "site1":"www.xxx.cn",
        "site2":"m.xxx.cn",
        "site3":"www.xxx.cn/json/"
    }
}
Obj.sites.site1 = "www.yyy.com";

for (i in Obj.sites) 
{
    x += Obj.sites[i] + "<br>";
}

document.getElementById("demo").innerHTML = x;

</script>

</body>
</html>

使用中括号([])来修改 JSON 对象的值:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSON</title>
</head>
<body>

<p id="demo"></p>

<script>
var Obj, i, x = "";
Obj = 
{
    "name":"xxx",
    "sites": 
    {
        "site1":"www.xxx.cn",
        "site2":"m.xxx.cn",
        "site3":"www.xxx.cn/json/"
    }
}
Obj.sites["site1"] = "www.yyy.com";

for (i in Obj.sites) 
{
    x += Obj.sites[i] + "<br>";
}

document.getElementById("demo").innerHTML = x;

</script>

</body>
</html>

JSON 模式

示例

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "title": "Product",
    "description": "A product from xxx's catalog",
    "type": "object",
    "properties": 
    {
        "id": 
        {
            "description": "The unique identifier for a product",
            "type": "integer"
        },
        "name": 
        {
            "description": "Name of the product",
            "type": "string"
        },
        "price": 
        {
            "type": "number",
            "minimum": 0,
            "exclusiveMinimum": true
        }
    },
    "required": ["id", "name", "price"]
}

用于这一模式中的各种重要关键字:

关键字描述
$schema$schema 关键字状态,表示这个模式与 v4 规范草案书写一致。
title用它给我们的模式提供了标题。
description关于模式的描述。
typetype 关键字在我们的 JSON 数据上定义了第一个约束:必须是一个 JSON 对象。
properties定义各种键和他们的值类型,以及用于 JSON 文件中的最小值和最大值。
required存放必要属性列表。
minimum给值设置的约束条件,表示可以接受的最小值。
exclusiveMinimum如果存在 "exclusiveMinimum" 并且具有布尔值 true,如果它严格意义上大于 "minimum" 的值则实例有效。
maximum给值设置的约束条件,表示可以接受的最大值。
exclusiveMaximum如果存在 "exclusiveMinimum" 并且具有布尔值 true,如果它严格意义上小于 "maximum" 的值则实例有效。
multipleOf如果通过这个关键字的值分割实例的结果是一个数字则表示紧靠 "multipleOf" 的数字实例是有效的。
maxLength字符串实例字符的最大长度数值。
minLength字符串实例字符的最小长度数值。
pattern如果正则表达式匹配实例成功则字符串实例被认为是有效的。

JSON 基础结构

JSON的两种结构

  1. 对象结构(键值对);
  2. 数组结构;

对象结构

对象结构是使用大括号“{}”括起来的,大括号内是由0个或多个用英文逗号分隔的“关键字:值”对(key:value)构成的。

语法:

var Obj =
{
    "键名1":值1,
    "键名2":值2,
    ……
    "键名n":值n
}

注意:这里的键名是字符串,但是值可以是数值、字符串、对象、数组或逻辑true和false。

JSON数组结构

JSON数组结构是用中括号“[]”括起来,中括号内部由0个或多个以英文逗号“,”分隔的值列表组成。

语法:

var arr =
[
    {
        "键名1":值1,
        "键名2":值2
    },
    {
        "键名3":值3,
        "键名4":值4
    },
    ……
]

注意:这里的键名是字符串,但是值可以是数值、字符串、对象、数组或逻辑true和false。

JSON 数据格式

添加 JSON

JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。

示例

最简单的形式,用 JSON 表示名称/值对:

{ "firstName": "xxx" }

比等效的纯文本名称/值对占用更多的空间:

firstName="xxx"

创建包含多个名称/值对的记录

{
    "firstName": "x",
    "lastName":"y",
    "email": "x@newInstance.com"
}

在这种情况下 JSON 更容易使用,而且可读性更好。

值的数组

当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。

在 XML 中,需要许多开始标记和结束标记

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

{ "people": [
  { "firstName": "x1", "lastName":"y1", "email": "x1@newInstance.com" },
  { "firstName": "x2", "lastName":"y2", "email": "x2@newInstance.com" },
  { "firstName": "x3", "lastName":"y3", "email": "x3@newInstance.com" }
]}

可以使用相同的语法表示多个值(每个值包含多个记录):

{ 
"programmers": [
  { "firstName": "x1", "lastName":"y1", "email": "x1@newInstance.com" },
  { "firstName": "x2", "lastName":"y2", "email": "x2@newInstance.com" },
  { "firstName": "x3", "lastName":"y3", "email": "x3@newInstance.com" }
 ],
"authors": [
  { "firstName": "x4", "lastName": "y4", "genre": "xxxxx" },
  { "firstName": "x5", "lastName": "y5", "genre": "yyyyy" },
  { "firstName": "x6", "lastName": "y6", "genre": "zzzzz" }
 ]
}

注意:能够表示多个值,每个值进而包含多个值。在不同的主条目之间,记录中实际的名称/值对可以不一样。JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式。

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

实例

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

var x =
{ 
"programmers": [
  { "firstName": "x1", "lastName":"y1", "email": "x1@newInstance.com" },
  { "firstName": "x2", "lastName":"y2", "email": "x2@newInstance.com" },
  { "firstName": "x3", "lastName":"y3", "email": "x3@newInstance.com" }
 ],
"authors": [
  { "firstName": "x4", "lastName": "y4", "genre": "xxxxx" },
  { "firstName": "x5", "lastName": "y5", "genre": "yyyyy" },
  { "firstName": "x6", "lastName": "y6", "genre": "zzzzz" }
 ]
}

访问数据

只需用点号表示法来表示数组元素。

访问 programmers 列表的第一个条目的姓氏

x.programmers[0].lastName;

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

修改 JSON 数据

可以用点号和括号修改数据:

x.authors[1].lastName = "xyz";

转换回字符串

在 JavaScript中转换:

String newJSONtext = x.toJSONString();

获得了一个可以在任何地方使用的文本字符串

可以将任何 JavaScript 对象转换为 JSON 文本。并非只能处理原来用 JSON 字符串赋值的变量。

为了对名为 myObject 的对象进行转换,只需执行相同形式的命令:

String myObjectInJSON = myObject.toJSONString();

如果使用 JSON,只需调用一个简单的函数,就可以获得经过格式化的数据,可以直接使用了。对于其他数据格式,需要在原始数据和格式化数据之间进行转换。

JSON 数据解析

JSON 数据解析

js 代码

function showJSON() 
{
    var user = 
    {
        "username": "xxx",
        "age": 20,
        "info": 
        {
            "tel": "123456",
            "cellphone": "98765"
        },
        "address": [
            {
                "city": "xxx",
                "postcode": "222333"
            }, 
            {
                "city": "xxx",
                "postcode": "555666"
            }
        ]
    }
    alert(user.username);
    alert(user.age);
    alert(user.info.cellphone);
    alert(user.address[0].city);
    alert(user.address[0].postcode);
}

表示一个user对象,拥有username, age, info, address 等属性。

用JSON修改数据,修改上面的例子:

function showJSON() 
{
    var user = 
    {
        "username": "xxx",
        "age": 20,
        "info": 
        {
            "tel": "123456",
            "cellphone": "98765"
        },
        "address": [
            {
                "city": "xxx",
                "postcode": "222333"
            }, 
            {
                "city": "xxx",
                "postcode": "555666"
            }
        ]
    }
    alert(user.username);
    alert(user.age);
    alert(user.info.cellphone);
    alert(user.address[0].city);
    alert(user.address[0].postcode);
    user.username = "yyy";
    alert(user.username);
}
showJSON()

JSON提供了json.js包,下载http://www.json.org/json.js 后,将其引入然后就可以简单的使用​object.toJSONString()​转换成JSON数据。

js 代码

function showCar() 
{
    var carr = new Car("xxx", "Coronet x/y", 1968, "xxx");
    alert(carr.toJSONString());
}

function Car(make, model, year, color) 
{
    this.make = make;
    this.model = model;
    this.year = year;
    this.color = color;
}

使用​eval​来转换JSON字符到Object

js 代码

function Eval() 
{ 
    var str = '{ "name": "xxx", "occupation": "character" }'; 
    var obj = eval('(' + str + ')'); 
    alert(obj.toJSONString()); 
}

使用​parseJSON()​方法

js 代码

function Eval() 
{
    var str = '{ "name": "xxx", "occupation": "character" }';
    var obj = str.parseJSON();
    alert(obj.toJSONString());
}

JSON遍历

JS 循环遍历JSON数据

JSON数据如:

{
    "options":"[
    {/"text/":/"x1/",/"value/":/"1/"},
    {/"text/":/"x2/",/"value/":/"2/"},
    {/"text/":/"x3/",/"value/":/"3/"}
    ]"
}

用js:

<script type="text/javascript"> 
function text()
{ 
 var json = 
 {
    "options":"[
    {/"text/":/"x1/",/"value/":/"1/"},
    {/"text/":/"x2/",/"value/":/"2/"},
    {/"text/":/"x3/",/"value/":/"3/"}
    ]"
 }
 json = eval(json.options) 
 for(var i=0; i<json.length; i++) 
 { 
   alert(json[i].text+" " + json[i].value) 
 } 
} 
</script>

javascript数组遍历for与for in区别详解

js中遍历数组的有两种方式:

标准的for循环

var array = ['a']
for (var i = 1; i < array.length; i++) 
{
    alert(array[i])
}

 foreach循环

var array = ['a']
for (var i in array) 
{
    alert(array[i])
}

正常情况下上面两种遍历数组的方式结果一样。

第一个区别:

标准的for循环中的i是number类型,表示的是数组的下标,但是foreach循环中的i表示的是数组的key是string类型,因为js中一切皆为对象。

第二个区别:

加上如下代码:

//扩展了js原生的Array
Array.prototype.test=function()
{
 
}

标准的for循环仍然真正的对数组循环, 但是此时foreach循环对我刚才写的test方法写打印出来了。

这就是for与foreach遍历数组的最大区别。

建议

1.不要用for in遍历数组,全部统一采用标准的for循环变量数组
2.如果要对js的原生类扩展的时候,不要采用prototype了

JS遍历Json字符串

将Json字符串转换成JSON对象

var t='{"firstName": "x", "lastName": "y"}'; 
var obj = eval('(' + t + ')');

遍历读取键值对

for(var str in obj)
{ 
    alert(str+'='+obj[str]); 
}

示例:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<SCRIPT LANGUAGE="JavaScript">
    var t="{
        'firstName': 'x', 
        'lastName': 'y', 
        'address': 
            { 'streetAddress': 'xxx', 
              'city': 'xx', 
              'state': 'xx', 
              'postalCode': 98052 
            },
        'phoneNumbers': [ '425-777-7777','206-777-7777' ] 
    }";
 
    var obj=eval('('+t+')'); //单个JSON对象时要加括号,JSON数组就不需要了
    alert(obj.firstName);
    alert(obj.lastName);

    var t2="[
        {name:'xxx',age:'1'},    
        {name:'yyy',age:'2'},
        {name:'zzz',age:'3'},
        {name:'vvv',age:'4'}] ";
    var obj=eval(t2);
    for(var i=0;i<myobj.length;i++)
    {
        alert(obj[i].name);
        alert(obj[i].age);
    }


//stringifier 函数的作用跟 parse 相反, 用来将一个js对象转换为 JSON 文本。
var jsonText = JSON.stringify(obj);
alert(jsonText);

var myObject = JSON.parse(myJSONtext, filter);  


</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>

在JS里创建JSON数据然后遍历使用

创建一个JSON对象,包括了年份和月份的数据。

var YearSelect = {}; 
var Year = 2014; 
var DateOption; 
for (var i = Year; i < Year + 12; i++) 
{ 
    DateOption = {'Year':i, 'Month':i-Year+1}; 
    / alert(DateOption.Year) 
    YearSelect[i] = DateOption; 
}

遍历

for(var key in YearSelect)
{ 
    alert(YearSelect[key].Year); 
    alert(YearSelect[key].Month); 
}

js数组如何添加json数据及js数组与json的区别

js数组添加json数据的两种方式:

第一种方式:

personInfo: [],
for(var i = 0; i < _STAGE.passengerInfoArray.length; i++)
{
    var name = _STAGE.passengerInfoArray[i];
    var person = {v:name, text:name};
    this.personInfo.push(person);
}

第二种方式:

var passengerInfo = {};
passengerInfo.psgTypeDesc = psgTypeDesc;
passengerInfo.flightPrice = flightPrice;
_STAGE.passengerInfoArray.push(passengerInfo);

js数组与 json 的区别

一、数组

1. 定义一维数组:

var s=new Array();
s=[1,2,3,4];
alert(s[0]);

var s=new Array();
s[0]=1,s[1]=2,s[3]=3,s[4]=4;
alert(s[0]);

结果为1;

2. 定义二维数组:

var s=new Array();
var s=[[3,1],[2,3,4],3,[4,5,6,7,8]];
alert(s[1][0]);

结果为2;

二、定义json对象

1. json对象

var status_process = 
{
    "name1" : 'x1',
    "name2" : 'x2',
    "name3" : 'x3',
    "name4" : 'x4',
    "name5" : 'x5'
}    
alert(status_process);

结果为:Object:Object;

2. json字符串

var s1="{";
var s2 = " 
        'name1' : 'x1',  
        'name2' : 'x2',
        'name3' : 'x3',
        'name4' : 'x4',
        'name5' : 'x5'";
var s3="}";
var status_process=s1+s2+s3;

将字符串转换为json对象使用函数eval,eval("(" + status_process+ ")");

结论:从后台传入到前台的是json字符串,不是真正的json对象,因此需要使用eval函数转换。

3. json对象的使用

var status_process = 
{
    "name1" : 'x1',
    "name2" : 'x2',
    "name3" : 'x3',
    "name4" : 'x4',
    "name5" : 'x5'
} 
alert(status_process["name5"]);
alert(status_process.name5);

结果为x5;

结果为x5;

4. json二维对象

var status_process = {
 name1 : {name3:'xx'},
 name2 : 'x2',
 name3 : 'x3',
 name4 : 'x4',
 name5 : 'x5'
};
alert(status_process["name1"]["name3"]);
alert(status_process.name1.name3);

结果为xx;

结果为xx;

JS循环遍历JSON数据的方法

1. json数据的列循环

var len = json.length;
for (var i = 0; i < len; i++)
{
    for (obj in json[i])
    {
        var obj2 = obj;
    }
}

2. JS 循环遍历JSON数据

JSON数据如:

{
    "options":[
        {"text":"xxx","value":"1"},
        {"text":"yyy","value":"2"},
        {"text":"zzz","value":"3"}
    ]
}

用js循环遍历的方法如下:

<script type="text/javascript"> 
function text()
{ 
  var json = {"options":"[
    {/"text/":/"xxx/",/"value/":/"1/"},
    {/"text/":/"yyy/",/"value/":/"2/"},
    {/"text/":/"zzz/",/"value/":/"3/"}]"}  
  json = eval(json.options) 
  for(var i=0; i<json.length; i++) 
  { 
     alert(json[i].text+" " + json[i].value) 
  } 
} 
</script>

JSON字符串

javascript中JSON对象与JSON字符串相互转换实例

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script type="text/javascript">
        var obj = new Object();
        obj.Name = "x"
        obj.Age = 18;

        //通过字面量的形式来定义对象
        var obj1 = { "Name": "x", "Age": "18" };
        var arr = [{ "Name": "x", "Age": "18" }, { "Name": "xx", "Age": "20" }];

        //JSON格式:将json的字面量表示形式,当做字符串存放,则为json格式字符串
        var str = '{ "Name": "x", "Age": "18" }';
        var jsonstrarr = '[{ "Name": "x", "Age": "18" }, { "Name": "xx", "Age": "20" }];';
        
        //将json字符串转换成js对象(数组)
        var resobj = JSON.parse(str);
        alert(resobj.Name);

    </script>
</head>
<body>
</body>
</html>

在js对象和json对象的互转:

JS对象转换成为JSON

调用JSON.stringify()方法。

var data = new Object();
var json_data = JSON.stringify(data);

JSON转换成为JS

1、用jQuery的一个方法$.parseJSON()将JSON格式的数据转成JS对象。

var json_data = $.getJSON();
var data = $.parseJSON(json_data);

2、将json转换成js对象的方法:

var json = eval('(' + result + ')');

通过上面这个表达式,就完成了将服务器端响应给客户端的Json格式的字符串解析成了一个Json(格式的)对象,名称为“json”,通过“json.”或者“json[]”的方式便可进行数据访问。

JavaScript中字符串(string)转json的方法

JavaScript中字符串(string)转json的方法主要有四种:

第一种方式:使用js函数eval()

正确的转换方式:

testJson = eval("(" + testJson + ")");

eval()的速度非常快,但是他可以编译以及执行任何javaScript程序,所以会存在安全问题。在使用eval()。来源必须是值得信赖的。需要使用更安全的json解析器。在服务器不严格的编码在json或者如果不严格验证的输入,就有可能提供无效的json或者载有危险的脚本,在eval()中执行脚本,释放恶意代码。

代码

function ConvertToJsonForJs() 
{
    var testJson = '{ "name": "xxx", "age": 16 }';
    testJson = eval("(" + testJson + ")");
    alert(testJson.name);
}

第二种方式:使用jquery.parseJSON()方法对json的格式要求比较高,必须符合json格式

代码

function ConvertToJsonForJq() 
{
    var testJson = '{ "name": "xxx", "age": 16 }';
    testJson = $.parseJSON(testJson);
    alert(testJson.name);
}

第三种方式:使用Function来进行转换

代码

var jsonStr = '{"userName": "xxx","userAge": 26,"isMale": true}';
var json = (new Function("return " + jsonStr))();

可以看到其原理就是拼接js代码字符串,然后使用Function创建一个匿名方法然后调用之。

第四种方式:使用JSON全局对象

var jsonStr = '{"userName": "xxx","userAge": 26,"isMale": true}';
var json = JSON.parse(jsonStr);
var str = JSON.stringify(json);

JSON数组

用javascript对一个json数组深度赋值示例

用javascript对一个json数组深度赋值

代码

<!DOCTYPE HTML> 
<html> 
<head> 
<title>test</title> 
</head> 
<body> 
<script> 
var arr=
{ 
    "name":"xxx", 
    "age":23, 
    "address":
    { 
        "city":"xxxxxx", 
        "gas":
        { 
            "gasSheet":"yyy", 
            "H_adjust":1 
        }, 
        "time":
        { 
            "duration":31 
        } 
    }, 
    "units":
    {    
        "title":"function"
    } 
} 
function show(obj)
{ 
    var tmp={}; 
    for(var i in obj)
    { 
        if(obj[i]=="object")
        { 
            <span style="color:#ff0000;">tmp[i]=show(obj[i]);</span> 
        } 
        else    
        { 
            <span style="color:#ff0000;">tmp[i]=obj[i]</span> 
        } 
    } 
    return tmp; 
} 

var result=show(arr); 
console.log(result);
</script> 
</body> 
</html>

如何将一个jSON对象赋值给一个jSON数组

jSON对象:

var x = {"A": [1,2,3,4,5],"B": [ 2,3,4,5,6]}

jSON 数组

var y =  [{name:null,data:null},  {name:null,data:null}]

第一种方法:

var index=0;  
for( var tests in x)
{   
     y[index].name=tests;   
     y[index].data=x[tests];  
}

第一种方法对于超过两个名称/值对的情况不适用。

第二种方法:

y=[];  
for(var tests in x)
{  
     //定义一个新的jSON对象,改变成jSON数组中jSON数据的格式  
     var json = {name:tests, data:x[tests]};  
     //通过数组的push()方法向数组中增加jSON数据  
     y.push(json);  
}

第二种方法,在遍历x这个jSON对象的时候,生成新的格式的jSON对象,不断push到数组中,这样就达到了目的,而且即使是有名称/值对也不怕,通用性增强。

解析javascript 数组(以及json元素的添加删除)

javasscript删除数组的3种方法

1、用shift()方法

shift:删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined

var x=[1,2,3,4,5]
var x.shift() //得到1
alert(x) //[2,3,4,5]
2、用pop()方法

pop:删除原数组最后一项,并返回删除元素的值;如果数组为空则返回undefined

var x=[1,2,3,4,5]
var x.pop() //得到5
alert(x) //[1,2,3,4]
3、用splice方法

可以对数组任意项进行增加,删除,替换操作

修改操作:

var x=[1,2,3,4,5]
x.splice(2,1,8,9)
alert(x) //1,2,8,9,4,5

第一个参数是准备操作的数组位置,第二个参数是操作位置后面的数组项数,第三个以后的就是,被替换后的内容

例子表示:从x这个数组位置2开始(也就是值为3的那一项,数组下标从0开始的),位置2后的一项,替换成成8,9

如果把第二个参数改为2,也就是x.splice(2,2,8,9),也就是说位置2后面的两项换成8,9,打印出来的结果就是1,2,8,9,5,3和4这2两项被换掉了

这里需要说明的是,被替换的项数不一定要和替换的项数相等

删除操作:

var x=[1,2,3,4,5]
x.splice(2,1)
alert(x) //1,2,4,5

上面例子中,把x中的位置2后的1项替换成空的,后面没有内容,结果可以看到,把3这项删除了

添加操作:

var x=[1,2,3,4,5]
x.splice(2,0,8,9)
alert(x) //1,2,8,9,3,4,5

上面例子中,把chaomao中位置2后的0项换成8,9,也就等于添加了两项

javasscript删除对象的方法

js中删除对象元素用delete操作符

代码

var p =
{
    "name": “x”,
    "age":45,
    "sex":"male"
};
delete p.name
for(var i in p)
{
    console.log(i);
}

添加json元素的方法

代码

var json = {}; 
json[text] = value;
json.text2 = value2;  

js数组如何添加json数据

js数组添加json数据的方式有如下两种:

第一种方式

personInfo : [];
for(var i = 0; i < _STAGE.passengerInfoArray.length; i++)
{
  var name = _STAGE.passengerInfoArray[i];
  var person = {v:name, text:name};
  this.personInfo.push(person);
}

第二种方式

var passengerInfo = {};
passengerInfo.psgTypeDesc = psgTypeDesc;
passengerInfo.flightPrice = flightPrice;
_STAGE.passengerInfoArray.push(passengerInfo);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值