将二维javascript数组转换为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')
    )
当我使用这个转储函数将

数组打印到控制台时,它看起来很好。我试着弄清楚如何让这个与对象一起工作,因为我认为我读过一些东西,说对象已经是JSON友好的,但因为我不是非常熟悉javascript,我几乎是挣扎。

edit:一些更多的细节…我的数组的声明(当我让它工作时)是这样的,尽管我可能搞砸了:

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);
});

这个数组结构的对象在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动作

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例程可能会忽略这些属性,而只序列化数字索引属性。