2011-09-22 56 views
1

我已經嘗試了幾種不同的方法JSON(字符串化,的toJSON,並可能是一些完全不相干的別人絕望的),但似乎無法弄清楚如何使字符串化這是我可以將它傳遞給一個PHP腳本。我能夠創建一個二維數組,這可以表示這樣的事情:將二維的javascript數組JSON

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

你確定你的意思是外部結構是一個數組? –

+0

我這麼認爲。如果變種被命名fileArray,那麼每個元件會是這樣的fileArray [ '圖像'] [0],fileArray [ '圖像'] [1],fileArray [ '圖像'] [2],fileArray [ '恢復'] [0]和fileArray ['reel'] [0]。 – Justin

+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的行動。在PHP端

+0

謝謝,很好的解釋! – Justin

+0

即使簡化版本仍然比問題中的結構更復雜。爲什麼你想要一個對象數組,其中每個對象只有一個屬性?我的答案中的結構直接匹配問題的結構... – nnnnnn

+0

我認爲理想情況下我想要一個帶有fileType屬性和名稱屬性的對象數組 – Justin

0

你的樣品預期輸出具有包含數字陣列關聯數組。 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字符串化程序可能會忽略這些屬性,只連載的數字索引屬性。

+0

這將如何動態聲明?推動不會在我的對象上工作。 – Justin

+0

但是你不推動對象,而是推動存儲在對象屬性中的數組。 –

+0

如果您只是將fileArray的初始聲明更改爲'var fileArray = {}',則您的代碼應該按原樣工作。接下來的三行添加屬性'image','resume'和'reel',每個屬性都是一個數組。在'.each'循環中'fileArray [type]'訪問其中一個數組,'fileArray [type] .push(name);'將名稱值壓入關聯的數組中。 – nnnnnn