2012-02-16 4 views
4

I ont un tableau multidimensionnel comme celui-ciJSON et tableau multidimensionnel

Array 
(
    [1] => Array 
     (
      [product_id] => 1 
      [product_model] => HFJ5G1.5 
      [product_type] => plat 
      [product_return] => graviteits 

     ) 

    [2] => Array 
     (
      [product_id] => 2 
      [product_model] => HHJ5S2.5 
      [product_type] => holle plunjer 
      [product_return] => veer  

     ) 
    ); //Only 2 are shown here i have around 110 values 

Et j'encodées cela à JSON par

json_encode($array); 

Le abouti jsonString est quelque chose comme ça

{"1":{"product_id":"1","product_model":"HFJ5G1.5","product_type":"plat","product_return":"graviteits"},"2":{"product_id":"2","product_model":"HHJ5S2.5","product_type":"holle plunjer","product_return":"veer"}} 

quand je fais alerte (jsonString.length); le résultat est 4 Mais je veux que le résultat soit 2 heures je fais quelque chose de mal.

+0

'le résultat est 4' êtes-vous sûr qu'il est lié à votre JSON? les objets ne supportent pas la propriété de longueur. compare 'alert ({}. length);' et alert ([]. length); ' – Cheery

+0

Je pense qu'un [manque dans mon json mais je ne sais pas comment l'ajouter .. – coolguy

Répondre

6

un littéral d'objet n'a pas .length

vous pouvez compter propriétés à l'aide this method:

var count = 0; 

for (i in jsonString) { 
    if (jsonString.hasOwnProperty(i)) { 
     count++; 
    } 
} 

alert(count); //count shall have length for you 

OU

depuis votre tableau n'a pas d'indices numériques (à partir de 0), il supposait que vous utilisiez un tableau associatif , d'où ils ont jeté un objet des articles plutôt qu'un tableau d'éléments.

pour les tourner vers des indices numériques, tout ce que vous avez à faire est d'utiliser array_values avant de les coder pour JSON:

json_encode(array_values($array)); 

alors le JSON sera un tableau .. then you can use length

de ceci:

Array(
[1] => Array(
     [product_id] => 1 
     [product_model] => HFJ5G1.5 
     [product_type] => plat 
     [product_return] => graviteits 
    ) 
[2] => Array(
     [product_id] => 2 
     [product_model] => HHJ5S2.5 
     [product_type] => holle plunjer 
     [product_return] => veer  
    ) 
); 

il devient ce à l'aide array_values ​​(), notez les index par article:

Array(
[0] => Array(
     [product_id] => 1 
     [product_model] => HFJ5G1.5 
     [product_type] => plat 
     [product_return] => graviteits 
    ) 
[1] => Array(
     [product_id] => 2 
     [product_model] => HHJ5S2.5 
     [product_type] => holle plunjer 
     [product_return] => veer  
    ) 
); 

puis encodées à JSON et stockés à jsonString:

jsonString = [ 
    { 
     "product_id": "1", 
     "product_model": "HFJ5G1.5", 
     "product_type": "plat", 
     "product_return": "graviteits" 
    }, 
    { 
     "product_id": "2", 
     "product_model": "HHJ5S2.5", 
     "product_type": "holle plunjer", 
     "product_return": "veer" 
    } 
]; 

alert(jsonString.length); 
+0

Y at-il quelque chose de mal avec mon json tableau suis-je manquant un [support? – coolguy

+0

lire ma mise à jour, il couvre dans la deuxième méthode de le faire. – Joseph

+0

Merci monsieur Joseph! – coolguy

1

objets ne supportent pas la propriété de longueur: alert({}.length); donne undefined et alert([].length); donne 0. Pour trouver la « longueur » de niveau supérieur, vous pouvez le faire comme:

var arr ={"1":{"product_id":"1","product_model":"HFJ5G1.5", 
       "product_type":"plat","product_return":"graviteits"}, 
      "2":{"product_id":"2","product_model":"HHJ5S2.5", 
       "product_type":"holle plunjer","product_return":"veer"}}; 
var len = 0; 
for(var i in arr) len++; 
alert(len); 

http://jsfiddle.net/uszaV/

+0

Y a-t-il quelque chose qui ne va pas avec mon tableau json? – coolguy

+0

@ubercooluk Il n'y a rien de mal, lorsque vous enregistrez le tableau associatif dans le format json, il devient un objet afin de préserver les clés. Comparez 'echo json_encode (array (1,2));' et 'echo json_encode (array ('a' => 1, 'b' => 2));' – Cheery

Questions connexes