将JSON对象字符串数组转换为JS对象数组

22
我想将一个JSON字符串数组转换为JSON对象数组,而不必循环遍历每个项并使用JSON.parse解析它。
示例:
var s=[
  '{"Select":"11", "PhotoCount":"12"}',
  '{"Select":"21", "PhotoCount":"22"}',
  '{"Select":"31", "PhotoCount":"32"}'];

10
那已经是一个 JavaScript 对象数组了! - bfavaretto
3
请确认您实际上拥有一个JavaScript对象的JavaScript数组(正如您在问题中输入的)。如果是这样,请解释一下您想要什么(因为如果是这种情况,您的问题标题完全是误导性的)。 - Phrogz
是的,它是一个由JSON字符串对象组成的JavaScript数组。 - Alaa Osta
我已经编辑了你的问题,以匹配你刚才说的内容。请确保你使用了正确的术语,现在问题中所看到的与你所拥有的相匹配。 - Phrogz
3个回答

54

如果你有一个由 JSON 对象组成的 JS 数组:

var s=['{"Select":"11","PhotoCount":"12"}','{"Select":"21","PhotoCount":"22"}'];

如果你想要一个对象数组:

// JavaScript array of JavaScript objects
var objs = s.map(JSON.parse);

// ...or for older browsers
var objs=[];
for (var i=s.length;i--;) objs[i]=JSON.parse(s[i]);

// ...or for maximum speed:
var objs = JSON.parse('['+s.join(',')+']');

请参考速度测试,以对比不同浏览器之间的表现。


如果您有一个表示对象数组的单个JSON字符串:

var s='[{"Select":"11","PhotoCount":"12"},{"Select":"21","PhotoCount":"22"}]';

并且您想要一个对象数组:

// JavaScript array of JavaScript objects
var objs = JSON.parse(s);
如果你有一个对象数组:
// A JavaScript array of JavaScript objects
var s = [{"Select":"11", "PhotoCount":"12"},{"Select":"21", "PhotoCount":"22"}];

…如果你想获得它的JSON表示形式,则:

// JSON string representing an array of objects
var json = JSON.stringify(s);

如果你想要一个包含JSON字符串的JavaScript数组,那么:

// JavaScript array of strings (that are each a JSON object)
var jsons = s.map(JSON.stringify);

// ...or for older browsers
var jsons=[];
for (var i=s.length;i--;) jsons[i]=JSON.stringify(s[i]);

2
或者对于你的第一个例子,可以使用var objs = s.map(JSON.parse); - user1106925
@AlaaOsta,请再次阅读我所假设的数据。目前不清楚你真正拥有哪些数据以及你真正想要的数据是什么。 - Phrogz
@amnotiam 变量 objs = s.map(JSON.parse); 在IE8中不起作用。 - Alaa Osta
你需要IE8支持吗?那么请使用以下代码:var objs = []; for (var i=s.length;i--;) objs[i] = JSON.parse(s[i]);;请查看我的编辑。 - Phrogz
@Phrogz: 我会从头开始做,但我在我的问题中已经提到我不想使用这种方式,因为我有大量的数据。 - Alaa Osta
显示剩余3条评论

7
var json = jQuery.parseJSON(s); //If you have jQuery.

由于评论看起来很混乱,请在将那些方括号放入引号中后使用解析函数。

var s=['{"Select":"11","PhotoCount":"12"}','{"Select":"21","PhotoCount":"22"}'];

将上述代码更改为
var s='[{"Select":"11","PhotoCount":"12"},{"Select":"21","PhotoCount":"22"}]';

例如:

$(document).ready(function() {
    var s= '[{"Select":"11","PhotoCount":"12"},{"Select":"21","PhotoCount":"22"}]';

    s = jQuery.parseJSON(s);

    alert( s[0]["Select"] );
});

然后使用parse函数。它一定会起作用。

编辑:非常抱歉我给出了错误的函数名。正确的是jQuery.parseJSON

Jquery

The json api

编辑(2020年4月30日):

编辑此答案,因为我得到了一个赞。对于非JQuery用户,有一个浏览器原生函数可用,JSON.parse("<json string here>")


它的插件或JS文件是什么? - Alaa Osta
1
你能否同时包含一个 json_encode jQuery 插件的链接?它绝对不是核心方法。 - Kevin B
1
jQuery确实提供了一个jQuery.parseJSON()方法。 - Kevin B
尝试将以下代码更改为: var s='[{"Select":"11","PhotoCount":"12"}','{"Select":"21","PhotoCount":"22"}]'; 然后使用解析函数。原始代码如下: var s=['{"Select":"11","PhotoCount":"12"}','{"Select":"21","PhotoCount":"22"}']; - KBN

0

如果你真的有:

var s = ['{"Select":"11", "PhotoCount":"12"}','{"Select":"21", "PhotoCount":"22"}'];

然后简单地:

var objs = $.map(s, $.parseJSON);

这里有一个演示。


@AlaaOsta:抱歉,我忘记了s。请再试一次。 - Ry-
1
请注意,它不适用于IE 8或更早版本。 - Ry-
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/10617/discussion-between-alaa-osta-and-minitech - Alaa Osta
@AlaaOsta:我的意思是,得票最高的解决方案在IE 8中不起作用。这个可以,xFourtyFourx的另一个也可以。 - Ry-

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接