JSON

JavaScript json对象与数组转换简单实现方法实例详解

字号+ 作者:H5之家 来源:H5之家 2017-09-01 16:00 我要评论( )

js数组与 json 的区别 一,数组 1. 定义一维数组:var s1=new Array(); s1=[1,2,3,4]或者s1[0]=1,s1[1]=2,s1[3]=3,s1[4]=4; alert(s1[0]); 结果为1;

js数组与 json 的区别

一,数组

1. 定义一维数组:var s1=new Array();

s1=[1,2,3,4]或者s1[0]=1,s1[1]=2,s1[3]=3,s1[4]=4;
alert(s1[0]);

结果为1;

2,,定义二维素组:var s1=new Array();

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

结果为2;

二,定义json对象

1,json对象

var status_process = { " name5" : '闲置期', "name1" : '播种期', "name2" : '苗期', "name3" : '生长期', "name4" : '采收期' } alert(status_process);

结果为:Object:Object;

2,json字符串

所谓json字符串,是指该字符串变量的值与json的格式相同,但是不是json对象

虽然status_process的值符合json对象的格式,但是它不是对象,只是一个字符串(是拼凑出来的);

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

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

json对象的使用

var status_process = { name5 : '闲置期', name1 : '播种期', name2 : '苗期', name3 : '生长期', name4 : '采收期' }; alert(status_process["name5"]); alert(status_process.name5);

两个都为:闲置期

JSON 语法规则

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

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

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 文件

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

JSON文本转换为 JavaScript 对象

JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。

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

示例:

$.ajax({ type: 'POST', url: '../../caseHandler.ashx?action=GetCase&id=' + id.toString(), //url action是方法的名称 data: "", dataType: "text", //可以是text,如果用text,返回的结果为字符串;如果需要json格式的,可以设置为json ContentType: "application/json; charset=utf-8", success: function (returnedData) { getMarkerFeature(eval("(" + returnedData+ ")")); }, error: function (msg) { alert("访问失败:"+ msg); } });

通过JavaScript创建对象数组

var employees = [ { "firstName":"Bill" , "lastName":"Gates" }, { "firstName":"George" , "lastName":"Bush" }, { "firstName":"Thomas" , "lastName": "Carter" } ];

JavaScript对象属性访问的两种方式

object.attribute

object["attribute"]

例如:

var employees = [ { "firstName":"Bill" , "lastName":"Gates" }, { "firstName":"George" , "lastName":"Bush" }, { "firstName":"Thomas" , "lastName": "Carter" } ]; alert(employees[0].lastName); // 方式一 alert(employees[0]["lastName"]); // 方式二

以上就是JavaScript json对象与数组转换简单实现方法实例详解的详细内容,更多请关注php中文网其它相关文章!

var array=['a'] //标准的 for循环 for(var i=1;i<array.length;i++){ alert(array[i]) } // foreach 循环 for(var i in array){ alert(array[i]) }

正常情况下上面两种遍历数组的方式结果一样。首先说两者的第一个区别

标准的for循环中的i是number类型,表示的是数组的下标,但是foreach循环中的i表示的是数组的key是string类型,因为js中一切皆为对象。自己试试 alert(typeof i);这个区别是小问题。现在我加上如下代码,上面的执行结果就不一样了。

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

试试看上面的代码执行什么。我们发现标准的for循环任然真正的对数组循环, 但是此时foreach循环对我刚才写的test方法写打印出来了。这就是for与foreach遍历数组的最大区别,如果我们在项目采用的是用foreach遍历数组,假设有一天谁不小心自己为了扩展js原生的Array类,或者引入一个外部的js框架也扩展了原生Array。那问题就来了。

为什么不要用for in语句 ?

关键词:原生Array类、扩展Array类
for in 语句对数组对象进行遍历潜在的bug在于:如果原生Array类被其他的js脚本库进行了原型扩展(比如多加一个toJSON方法即Array.prototype.toJSON=xxxx),那么用for in遍历扩展后的Array对象的逻辑将与遍历原生Array对象的逻辑发生差异。
举个简单的例子,

var x=[1]; for(var s in x){ alert(s); };

按常理,如果Array是原生js类,上面语句应该只执行一次alert方法,且s为数组的

grep

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • C#对象转Json序列化

    C#对象转Json序列化

    2017-09-02 12:00

  • 数组array与对象object相互转换 PHP数组和Json之间的转换

    数组array与对象object相互转换 PHP数组和Json之间的转换

    2017-09-01 16:01

  • Qt canvas3d 学习之obj 模型转成json格式后无法显示的问题解决

    Qt canvas3d 学习之obj 模型转成json格式后无法显示的问题解决

    2017-09-01 16:00

  • MySQL 5.7 新增加的 JSON 特性对应的 json 方法

    MySQL 5.7 新增加的 JSON 特性对应的 json 方法

    2017-09-01 09:03

网友点评