js 如何把js数组转成json格式按照一定格式处理成嵌套型的对象

许久不写了,实在是不知道写点什么,正好最近有个同事问了个问题,关于数组,对象和类数组的,仔细说起来都是基础,其实都没什么好讲的,不过看到还是有很多朋友有些迷糊,这里就简单对于定义以及一下相同点,不同点简单的说明一下!当然,这里我们只讨论数据结构的异同,并不讨论他们之间所拥有的方法等不同!
数组定义:简而言之就是一组有序的数据集合,其索引为从0开始且自然增长的整数,其元素值可以是任何js数据!并且包含一个名为length的属性,该属性表示数组元素的个数!
看着上面的定义,我们很容易就能大概知道数组是什么样的东西,下面我们来看个简单的例子:
var array = [1,2,3];
console.log(array[0])//1
console.log(array[1])//2
console.log(array[2])//3
console.log(array['length'])//3
从上面的例子我们可以看到,在声明数组时,我们只是显式的声明了数组元素的值,并没有显式的给这些值定义索引和length属性,但是在数组定义好后我们发现就可以直接使用数组的索引值来操作数组的元素了,从这不难看出,数组元素的索引和length属性是在数组定义时根据数组元素语言自动就帮你定义好了!而且很容易就能看出来,索引值是从0开始并且自然递增的!
对象定义:js中对象类型为一组无序的由键-&值组成的数据集合,其元素的键名和值都可以自定义!
我们来看一个例子:
var object = {'a': 1, 'b': 2}
console.log(object['a'])//1
console.log(object['b'])//2
console.log(object['length'])//undefined
从上面的例子简单来看,对象自身所拥有的(不包括继承来的)任何属性都是有用户自定义的!
数组与对象:
从上面的定义和例子上来看,不知道大家有没有发现,数组和对象在某些地方或时候其实是很相像的!
我们先看看他们相同的部分,首先我们可以把数组的索引值看成的元素的键名,元素看成是值,那么数组是不是也变成了键-&值构成的了!
我们在来看看他们不一样的地方,数组的所以值始终的从0开始递增的数字,对象的属性值可以是任何自定义的字符串,并且数组包含一个length属性,而对象自身所拥有的(不包括继承来的)任何属性都是有用户自定义的!也就是说我们,我们可以给显式的给对象定义length属性!
var arr = [1,2,3];
var obj = {0: 1, 1: 2, 2: 3, length: 3};
console.log(arr[0], obj[0])//1, 1
console.log(arr['length'], obj['length'])//1, 1
通过对比,我们发现完全可以使用对象来模拟数组,只要我们定义的对象的每个元素的键名都使用数字并且让其保持递增,且动态的定义一个length属性来表示元素个数,那么从效果上来说,基本就个数组相同了!这就是我们要说的:
类数组对象:只包含使用从零开始,且自然递增的整数做键名,并且定义了length表示元素个数的对象,我们就认为他是类数组对象!
类数组对象不仅是效果上跟数组相似,并且在某些操作上也相同:
//定义数组和类数组对象
var arr = [1,2,3];
var obj = {0: 1, 1: 2, 2: 3, length: 3};
//元素读写操作
console.log(arr[0], obj[0])//1, 1
console.log(arr['length'], obj['length'])//1, 1
arr[0] = 9;
obj[0] = 9;
for(var i = 0, len = arr. i & i++) {
arr[i]....
for(var i = 0, len = obj. i & i++) {
obj[i]....
我们看到,不仅在读写等操作上类数组对象和数组相似,并且在遍历元素上都可以使用for循环进行遍历!
通过上面我们对于定义的介绍,以及简单的对比,我们不难看出,其实我们可以从数据结构上把js的数组归为对象,因为我们可以使用对象来模拟数组,当然这里仅仅说的是数据结构上,其实他们本身所继承来的方法和一些属性是不同的!在平常的理解中大家可以把数组看成是特殊的对象,以方便理解!&
阅读(...) 评论()在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
这两种数据格式如何通过JS相互转化?相同的内容,扁平化的组合成嵌套的,嵌套的拆解成扁平化的格式弄了半天弄不出来,求助!
"number":"100.000",
"name": "admin.",
"level":1,
"children": [
"number": "100.210",
"name": "admin.marketing",
"level": 2
"number": "100.260",
"name": "admin.operation",
"level": 2,
"children": [
"number": "260.261",
"name": "operation.content",
"level": 3
"number": "260.262",
"name": "operation.promote",
"level": 2
"number": "260.263",
"name": "operation.service",
"level": 2
"number": "100.280",
"name": "admin.development",
"level": 2
"number":"100.000",
"name": "admin.",
"number": "100.210",
"name": "admin.marketing",
"level": 2
"number": "100.260",
"name": "admin.operation",
"level": 2
"number": "100.280",
"name": "admin.development",
"level": 2
"number": "260.261",
"name": "operation.content",
"level": 3
"number": "260.262",
"name": "operation.promote",
"level": 3
"number": "260.263",
"name": "operation.service",
"level": 3
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
利用递归实现
// 待处理数值
var data = [
"number":"100.000",
"name": "admin.",
"level":1,
"children": [
"number": "100.210",
"name": "admin.marketing",
"level": 2
"number": "100.260",
"name": "admin.operation",
"level": 2,
"children": [
"number": "260.261",
"name": "operation.content",
"level": 3
"number": "260.262",
"name": "operation.promote",
"level": 2
"number": "260.263",
"name": "operation.service",
"level": 2
"number": "100.280",
"name": "admin.development",
"level": 2
// 递归函数
function headFor(o, cb){
o.forEach(child =& {
cb(child);
if (child.children) {
headFor(child.children, cb);
// 遍历 data 的结果保存在 res
var res = [];
// 调用 递归函数headFor
(注意 第二个参数是函数)
headFor(data, item =& {
var temp = {};
temp.id = item.id
temp.number = item.
temp.name = item.
temp.level = item.
res.push(temp);
// 告诉数组怎么判断两个元素 然后让他数组自己去干
res.sort((a, b) =& {
return a.id & b.
res.forEach(e =& console.log(e));
console.log(JSON.stringify(res));
最外面的data是数组,其实他可以被认为是外层的 children 属性,而data的子元素自己也说不定有 children。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
现在逆向的方法也在群友owl的帮助下完成了!
var data=[
"number":"100.000",
"name": "admin.",
"number": "100.210",
"name": "admin.marketing",
"level": 2
"number": "100.260",
"name": "admin.operation",
"level": 2
"number": "100.280",
"name": "admin.development",
"level": 2
"number": "260.261",
"name": "operation.content",
"level": 3
"number": "260.262",
"name": "operation.promote",
"level": 3
"number": "260.263",
"name": "operation.service",
"level": 3
var res = [];
var dicKey = {};
data.forEach((m,i) =& {
var mStr = String(m.name).substr(0,String(m.name).indexOf(".")+1);
var isParent = String(m.name).charAt(m.name.length -1) == ".";
if(dicKey[mStr] == undefined)
dicKey[mStr] = [];
if(!isParent)
dicKey[mStr].push(i);
dicKey[mStr].push(i);
function getTreeJson(obj){
var key = String(obj.name).charAt(obj.name.length -1) == "." ? obj.name:String(obj.name).substr(String(obj.name).indexOf(".")+1) + ".";
if(dicKey[key])
dicKey[key].forEach(c =&{
if(!obj.children) obj.children = [];
obj.children.push(data[c]);
getTreeJson(data[c]);
data.forEach(m =& {
if(String(m.name).charAt(m.name.length -1) == ".")
res.push(m);
getTreeJson(m);
console.log(JSON.stringify(dicKey));
console.log(JSON.stringify(res));
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
var data = [
"number":"100.000",
"name": "admin.",
"level":1,
"children": [
"number": "100.210",
"name": "admin.marketing",
"level": 2
"number": "100.260",
"name": "admin.operation",
"level": 2,
"children": [
"number": "260.261",
"name": "operation.content",
"level": 3
"number": "260.262",
"name": "operation.promote",
"level": 2
"number": "260.263",
"name": "operation.service",
"level": 2
"number": "100.280",
"name": "admin.development",
"level": 2
var arr = [];
function selirizeData(data){
data.forEach(function(element) {
var item = {};
for(val in element){
if(val !== 'children'){
item[val] = element[val];
selirizeData(element['children']);
arr.push(item);
selirizeData(data);
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。JS中如何把JSON格式的字符串转化为一个对象或数组呢?_百度知道
JS中如何把JSON格式的字符串转化为一个对象或数组呢?
小弟初学js,对json格式的数据了解也不太多,想请教一下,怎样可以把json格式的字符串转化为js的对象或者数组呢?
我有更好的答案
var obj = eval('(' + str + ')');var obj = str.parseJSON(); //由JSON字符串转换为JSON对象var obj = JSON.parse(str); //由JSON字符串转换为JSON对象
采纳率:57%
来自团队:
JSON.parse ('{a:123}');趁机让你的用户别用&IE&吧。虽然&eval&也能用但是不安全。
本回答被网友采纳
data是json格式的字符串data = window.JSON && window.JSON.parse ? window.JSON.parse(data) : (new Function(&return & + data))();
var a=&{a:1}&;var b=eval(&(&+a+&)&);b就成对象了。
通常都是用eval()函数来进行转换的,例如:var sJson = '{a: 1}';var o = eval('(' + sJson + ')');alert(o.a);如果是数组的话,也是类似的,在字符串两边各加上一个小括号,然后用eval()函数将其转换为数组,再赋值给某个变量,就可以直接使用了。
到建站技术学习论坛网站查看回答详情&&
下载个json2.js来用就OK了。可以去下载
其他3条回答
为您推荐:
其他类似问题
json的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。js中把jsonAarray递归的方法转成树形的json对象
[问题点数:80分,结帖人jimmy609]
本版专家分:2627
结帖率 95.95%
CSDN今日推荐
本版专家分:2627
本版专家分:2627
本版专家分:85
本版专家分:0
本版专家分:0
本版专家分:0
匿名用户不能发表回复!|
其他相关推荐
1&jQuery插件支持的转换方式:
复制代码代码如下:
$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象
2&浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器:
复制代码代码如下:
使用JSON进行数据传输
一、选择的意义
在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式。为了更好的使用ajax,我们将学习一种有用的数据格式 JavaScript
Object Notation(JSON),以及如何使用它更轻松地在应用程序中移动数据和对象。JSON是一种简单的数据交换格式,在某些方面,它的作用与XML非常类似,但比XML更为简单,
js把word转成html js把word转成html js把word转成html js把word转成html
字符串内容
\&children\&: [
\&direction\&: \&\&,
\&hasMenu\&: false,
\&iconCls\&: \&\&,
\&id\&: \&622\&,
\&identityName\&: \&commonBizDescModel\&,
JSON 语法规则
JSON 语法是 JavaScript 对象表示法语法的子集。
数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组
JSON 对象在花括号中书写:
对象可以包含多个名称/值对:
{ &firstName&:&John& , &lastName&:&Doe& }
这一点也容易理解,与这条 JavaScript 语句等价:
ECMA-262(E3) 中没有将JSON概念写到标准中,还好在
ECMA-262(E5) 中JSON的概念被正式引入了,包括全局的JSON对象和Date的toJSON方法。
1,eval方式解析,恐怕这是最早的解析方式了。如下:
复制代码 代码如下:
function strToJson(str){
var json = eval('(' + str + ')');
参考链接:http://zhidao.baidu.com/question/.html
讨论组看到有个人问json对象转为JSON字符串,不能用外部的js文件。
刚开始大家回答:
JSON.stringify(obj)将JSON转为字符串。
JSON.parse(string)将字符串转为JSON格式。
后来百度到一别人写的方法,对象 json =[{id:
先看代码吧
//此时job里面的数据格式为{&logid&:2075,&words_result&:[{&words&:&acb&},{&words&:&xxx&},{&words&:&def&},{&words&:&hij&},{&words&:&klm&}],&wordsnum&:5}$.post(&Servleback&,function(data){
JS中的JSON对象
使用JSON进行数据传输
数据格式: [{&id&:2, &pid&:1, &children&:[{...},{...}]},{&id&:3, &pid&:1, &children&:[{...},{...}]},.......]注意: 下面的样例数据没有children属性,children属性是在程序代码生成的,下面的样例数据只是简单的从数据库查,未做任何处理,如果实际中数据库查出来的就是树形结构的数据,jsjs开发中如何把键值对对象转换成数组对象_百度知道
js开发中如何把键值对对象转换成数组对象
我有更好的答案
只需要一句,arr.__proto__=[];但是要注意浏览器支持__proto__才行,最新的浏览器应该都支持。以下两种都可以解决此问题:function transform(obj){var arr = [];for(var item in obj){arr.push(obj[item]);}}或者public static void main(String[] args) {String [] s={&2&,&3&,&4&};int [] array=new int[3];for(int i=0;i&s.i++){array[i]=Integer.parseInt(s[i]);System.out.println(array[i]);}}
采纳率:96%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 json数组嵌套 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信