【问题标题】:Convert array of JSON object strings to array of JS objects将 JSON 对象字符串数组转换为 JS 对象数组
【发布时间】:2012-05-08 12:58:15
【问题描述】:

我想将 JSON 字符串数组转换为 JSON 对象数组,而无需遍历每个项目并使用 JSON.parse 对其进行解析。

例子:

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

【问题讨论】:

  • 这已经是一个 JavaScript 对象数组了!
  • 请确认您确实有一个 JavaScript 对象的 JavaScript 数组(正如您在问题中键入的那样)。如果是这样,请解释你想要什么(因为如果是这种情况,你的问题的标题完全是误导性的)。
  • 是的,它是一个 json 字符串对象的 javascript 数组
  • 我已经编辑了您的问题以符合您刚才所说的内容。请确保您使用了正确的术语,您在问题中看到的现在与您所拥有的相符。

标签: javascript jquery json


【解决方案1】:
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"] );
});

然后使用解析函数。一定会成功的。

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

Jquery

The json api

编辑(2020 年 4 月 30 日):

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

【讨论】:

  • 插件或js文件是什么?
  • 您还可以包含指向 json_encode jQuery 插件的链接吗?这绝对不是核心方法。
  • jQuery 确实提供了一个jQuery.parseJSON() 方法。
  • var s=['{"Select":"11","PhotoCount":"12"}','{"Select":"21","PhotoCount":"22"} '];尝试将其更改为: var s='[{"Select":"11","PhotoCount":"12"}','{"Select":"21","PhotoCount":"22"}]';然后使用解析函数。
【解决方案2】:

如果你有一个 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(',')+']');

浏览器对比见the speed tests


如果您有一个表示对象数组的 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]);

【讨论】:

  • var objs = s.map(JSON.parse);作为您的第一个示例。
  • @AlaaOsta 再次阅读我假设您的数据是什么。目前尚不清楚您真正拥有哪些数据以及您真正想要哪些数据。
  • @amnotiam var objs = s.map(JSON.parse);不,这在 IE8 中不起作用
  • 您需要 IE8 支持?然后改为使用:var objs = []; for (var i=s.length;i--;) objs[i] = JSON.parse(s[i]);;查看我的编辑
  • @Phrogz:我会从一开始就这样做,我在我的问题中暴露了这一点,我不想使用这种方式,因为我有大量数据
【解决方案3】:

如果你真的有:

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

然后简单地说:

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

Here's a demo.

【讨论】:

  • @AlaaOsta:对不起,我忘记了s, 。再试一次。
  • @AlaaOsta:但请注意,它不适用于 IE 8 或更早版本。
  • @AlaaOsta:我的意思是投票最多的解决方案在 IE 8 中不起作用。这个解决方案以及 xFourtyFourx 的另一个解决方案。
猜你喜欢
  • 2019-03-14
  • 2023-01-12
  • 2013-08-29
  • 1970-01-01
  • 2019-12-17
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多