如何从 json 对象构建键值的 JavaScript 数组
Posted
技术标签:
【中文标题】如何从 json 对象构建键值的 JavaScript 数组【英文标题】:How to build a JavaScript array of key values form a json object 【发布时间】:2011-05-27 10:38:42 【问题描述】:基本上我有以下 JSON 来源的对象:
(
"id" : 3,
"clientName" : "Avia",
"monthlyactiveusers" : 2083,
"dailynewlikes" : 0,
"totallikes" : 4258,
"usersgraph" :
"sTotalLikes" : [
"likes" : 79,
"date" : "1/1/2010"
,
"likes" : 116,
"date" : "1/1/2010"
],
"sDailyActiveUsers" : [
"likes" : 79,
"date" : "1/1/2010"
,
"likes" : 116,
"date" : "1/1/2010"
]
);
我需要以下结果:
sTotalLikes = [['1/1/2010', 79],['1/1/2010', 79],['1/11/2010', 79]];
sDailyActiveUsers = [['1/1/2010', 10],['1/5/2010', 300],['1/11/2010', 220]];
我知道您可以使用以下代码遍历对象以构建数组,但我不知道如何构建 javascript 数组本身。提前感谢您的帮助。
var sTotalLikes = new Array();
for (var i = 0; i < usersgraph.sTotalLikes.length; i++)
//how do I build the arry ?
sTotalLikes[i]
【问题讨论】:
让我想知道是否存在用于 JavaScript 数据结构的某种奇怪的枢轴实用程序。那会很有用。 ...它是一个对象字面量,而不是一个 JSON 对象(尽管它在字符串中时可能曾经是一个 JSON 对象)。幸运的是,我现在为这个 URL 添加了书签:benalman.com/news/2010/03/theres-no-such-thing-as-a-json @Felix: 是的,+1 - 带有引号键的 JS 对象不是“JSON 对象”。 【参考方案1】:您必须遍历 sTotalLikes
和 sDailyActiveUsers
中的每个项目。
您也可以see the live demo here 使用 cmets 获取完整且有效的程序。 :)
// declare arrays for storing total likes and active users
var totalLikes = [];
var activeUsers = [];
// first iterate for total likes
for (var i = 0; i < data.usersgraph.sTotalLikes.length; i ++)
var like = data.usersgraph.sTotalLikes[i];
// create a new array of date and likes
// and push into total likes
totalLikes.push([like.date, like.likes]);
// then iterate for active users
for (var i = 0; i < data.usersgraph.sDailyActiveUsers.length; i ++)
var user = data.usersgraph.sDailyActiveUsers[i];
// create a new array of date and likes
// and push into active users
activeUsers.push([user.date, user.likes]);
希望这会有所帮助!
【讨论】:
哇!! jsfiddle.net 很棒。感谢您指出了这一点。这正是我测试员工所需要的。我正在使用 jqplot,最初我试图用上面指定的 Json 字符串来提供它,但由于某种原因它不喜欢它,所以我将构建一个 JavaScript 数组它。再次感谢您的帮助。【参考方案2】:试试这个.. 你可以很容易地为 sDailyActiveUsers 扩展它
var sTotalLikes = new Array();
var lsTotalLikes = usersgraph.sTotalLikes;
for (var i = 0; i < lsTotalLikes.length; i++)
var obj = lsTotalLikes[i];
var lArr = []
lArr.push(obj.date);
lArr.push(obj.likes);
sTotalLikes.push(lArr)
【讨论】:
首选var sTotalLikes = [];
而不是代码中的那个。
:) 我不想改变OP的初始代码,你可以看一下lArr定义,我用过[],因为我懒得打字:)【参考方案3】:
在我看来,您只是想查看对象的值。
var usersgraph = ... ; // pulled from the data in your question
var result = ;
for (users_key in usersgraph)
var vals = [];
var data = usersgraph[users_key]
for (k in data)
vals.push(values(data[k]));
// or if you need to order them differently..
//vals.push([ data[k]['date'], data[k]['likes'] ]);
result[users_key] = vals;
哦,如果您还没有猜到,您可以使用 [] 创建一个数组并使用 创建一个对象/关联数组。
【讨论】:
【参考方案4】:像这样(参考你的代码):
/* inside your for loop */
sTotalLikes.push([
usersgraph.sTotalLikes[i].date,
usersgraph.sTotalLikes[i].likes
])
【讨论】:
以上是关于如何从 json 对象构建键值的 JavaScript 数组的主要内容,如果未能解决你的问题,请参考以下文章
从具有不同值的逗号分隔 JSON 对象填充 html 下拉列表
使用 Spring boot 解析具有无效键值的 JSON 对象