创建一个数组,将其转换为json并将其传递给php

时间:2017-10-30 09:12:17

标签: javascript arrays json

我想用javascript动态填充数组,然后将其转换为json字符串并将其传递给php来处理它。
问题:
当我像-code 1-那样定义数组时,输出是预期的:

var feld = {
"key1" : "1",
"key2" : "2",
"key3" : "3"
};
for (key in feld) { console.log (key + "= " + feld[key]); }
var jsonString = JSON.stringify(feld);
console.log(jsonString);

输出:

  

key1 = 1
  key2 = 2
  key3 = 3
  { “KEY1”: “1”, “KEY2”: “2”, “KEY3”: “3”}

如果我将数组定义为-code 2-

var feld = new Array ();
feld["key1"]="1";
feld["key2"]="2";
feld["key3"]="3";
for (key in feld) { console.log (key + "= " + feld[key]); }
var jsonString = JSON.stringify(feld);
console.log(jsonString);

输出:

  

key1 = 1
  key2 = 2
  key3 = 3
  []

这意味着,使用代码-2-没有任何内容可以传递给php 怎么了?

4 个答案:

答案 0 :(得分:2)

" -code 1 - "它不是一个数组,它是一个非数组对象。 " -code 2 - "是一个数组,但用作非数组对象。 (并且当你对其进行字符串化时,你没有看到你的非数组属性的原因是因为它是一个数组,JSON.stringify只序列化数组条目,而不是非数组属性。)

如果您需要数组,那么您需要创建一个数组:

var feld = ["1", "2", "3"];

但听起来你不想要一个数组,你真的想要一个对象,就像你的第一个例子。如果将其转换为JSON并将其发送到服务器,请使用json_decode将其解码为PHP对象,您可以在其中访问key1key2key3属性获得他们的价值观。

答案 1 :(得分:0)

您在js中使用php中的数组混淆数组。如果在php中你可以为这样的数组定义文字键:

<?php 
   $a = array( 'key1' => 1);
   $a['key1] === 1

在js中,它相当于一个对象而不是一个数组。

如果你愿意的话,Js更像数学,具有数组的概念,

a = [2, 4, 6];

它只是一个由数字索引给出的值/对象列表。

a[1] === 4

答案 2 :(得分:0)

在JavaScript中,您可以将属性附加到数组,该数组不是此数组的成员。例如:

let array = new Array(); // Creates empty array: []
array[0] = 123; // Inserts a member to array
console.log(array) // Will output: [123]

array["abc"] = 789 // Attaches a property to array

console.log(array) // Will output: [123], no members were added to array
console.log(array.abc) // Will output: 789

这是可能的,因为Array也充当对象,因此它有成员(索引)和属性(有键)。

数组没有键(key0,key2,key3,...),只有索引(0,1,2,...)。您可能想要一个地图或一个数组。地图是由您附加到问题的代码(第一部分)创建的,数组可以创建如下:

var feld = new Array ();
feld[0]="1";
feld[1]="2";
feld[2]="3";
var jsonString = JSON.stringify(feld);
console.log(jsonString);

答案 3 :(得分:-1)

你必须对你的数组进行客观化:

...
feld = Object.assign({}, feld);

var jsonString = JSON.stringify(feld);
...