将二维javascript数组转换为JSON

时间:2011-09-22 23:08:33

标签: php javascript jquery arrays json

我已经尝试了一些不同的json方法(stringify,toJSON,可能还有一些完全不相干的其他人出于绝望),但似乎无法弄清楚如何对此进行字符串化以便我可以将其传递给PHP脚本。我能够创建一个二维数组,可以表示如下:

array(
    'image'=>array(
        0=>'hello.jpeg', 
        1=>'goodbye.jpeg', 
        2=>'etc.jpeg'),
    'resume'=>array(
        0=>'resume.doc'),
    'reel'=>array(
        0=>'reel.mov')
    )

当我使用此dump函数将其打印到控制台时,数组看起来没问题。我试图弄清楚如何让它与对象一起工作,因为我以为我读过的东西说的对象已经是JSON友好的,但是由于我不是非常熟悉javascript,我几乎挣扎着。

编辑:更多细节...我的数组的声明(当我工作时)是这样的,虽然我可能搞砸了:

var fileArray = [];
fileArray['image'] = [];
fileArray['resume'] = [];
fileArray['reel'] = [];

var type;
var name;

var divs = $("#upload-container").children('div');

$.each(divs, function() {
    type = $(this).attr('id');
    name = $(this).html();

    fileArray[type].push(name);
});

2 个答案:

答案 0 :(得分:1)

该数组结构的对象在JavaScript中可能如下所示:

var objects = 
[
    {
        'image': [
            { '0': 'hello.jpeg' },
            { '1': 'goodbye.jpeg' },
            { '2': 'etc.jpeg' }
        ]
    },
    {
        'resume': [
            { '0': 'resume.doc' }
        ]
    },
    {
        'reel': [
            { '0': 'reel.mov' }
        ]
    }
]

所以现在你有了一个包含三个对象的数组,每个对象都包含一个属性(图像,简历,卷轴),它是另一个对象数组,基本上是键:值对('0':'hello.jpeg')。也许你可以通过不打扰使用索引来简化它:

var objects = 
[
    {
        'image': [ 'hello.jpeg', 'goodbye.jpeg', 'etc.jpeg' ]
    },
    {
        'resume': [ 'resume.doc' ],
    },
    {
        'reel': [ 'reel.mov' ]
    }
]

然后您可以使用JSON.stringify(objects)传递给您的PHP操作。

答案 1 :(得分:0)

PHP端的样本预期输出具有包含数字数组的关联数组。 JavaScript数组具有数字索引:如果您希望字符串作为键使用普通对象而不是数组,因为JavaScript对象的行为类似于您从PHP中考虑的关联数组。相应的JavaScript对象应如下所示:

var fileArray = {
  'image' : [ 'hello.jpeg',
             'goodbye.jpeg',
             'etc.jpeg'],
  'resume' : [ 'resume.doc' ],
  'reel' : [ 'reel.mov' ]
};

在使用方括号定义的数组中,隐含了数字索引。请注意fileArray定义为花括号而不是方括号,因此不是数组(尽管它的名称)。如果要一次设置一个属性,这仍然允许您使用fileArray['image'] = ...语法:

var fileArray = {}; // an object, not an array
fileArray['image'] = [];
fileArray['resume'] = [];
fileArray['reel'] = [];  

请注意,初始声明中的花括号使其成为对象,但仍使用方括号语法访问属性。

您将fileArray定义为带方括号的JavaScript数组的方式仍允许您添加基于字符串的键属性,因为数组对象,但 JSON stringify例程可能忽略这些属性,只序列化数字索引属性。