![](/img/trans.png)
[英]Converting a multi-dimensional array (javascript) to JSON (or similar) for transport
[英]converting a two dimensional javascript array to 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不太熟悉,因此我幾乎陷入困境。
編輯:更多詳細信息...我的數組的聲明(當我有它的工作時)是這樣的,盡管我可能搞砸了:
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' }
]
}
]
因此,現在您有了一個包含三個對象的數組,每個對象包含一個屬性(圖像,履歷,卷軸),該屬性是另一個對象數組,這些對象基本上具有key:value對( '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字符串化例程可能會忽略這些屬性,而只會序列化數字索引的屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.