2016-07-11 8 views
0

Ich Abfrage zwei Arrays aus der Datenbank und wandeln sie in Json-Format. Die Einrichtung ist wie folgt:Javascript: wie auf jedes Element in einem Array zugreifen

{"groups":"[apple,bee,car,dogs,egos,fruits]", "members":"[g,h,i,j,k,l]"} 

Ich versuche auf jedes Element in Gruppen zuzugreifen. Das Gruppen-Array ist eine Liste. Ich habe versucht, mit Index, und es gibt mir Gruppen [0] = 'a', Gruppen [1] = 'p' ... Also Index verwenden funktioniert nicht.

Ich möchte auch zählen, wie viele Elemente im Array Gruppen oder in der Mitglieder-Array, und die Verwendung von .Length geben mir nur die Länge des Zeichens, nicht die tatsächliche Anzahl der Elemente.

Jeder Rat würde geschätzt werden. Vielen Dank.

+0

Es klingt, als ob Sie die JSON nicht richtig in ein Array von Strings geparst haben – Aaron3468

+0

[JSON] (http://www.json.org/) unterstützt Arrays, es gibt keinen Grund zu versuchen, Ihre Werte als Zeichenfolgen hinzuzufügen . –

Antwort

4

JSON.parse(groups) wird nicht funktionieren, weil [apple,bee,car,dogs,egos,fruits] nicht korrekt ist JSON-Zeichenfolge.

["apple","bee","car","dogs","egos","fruits"] - ist korrekte JSON-Zeichenfolge, die analysiert werden kann.

P.S. members ist nicht korrekt JSON-Zeichenfolge zu.

// If you have some data 
 

 
data = { 
 
    groups: ["apple", "bee", "car", "dogs", "egos", "fruits"], 
 
    members: ["g", "h", "i", "j", "k", "l"] 
 
}; 
 

 
// you can convert it to JSON string 
 

 
jsonData = JSON.stringify(data); 
 
console.log('JSON data: ', jsonData); 
 

 
// and then parse this string 
 

 
restoredData = JSON.parse(jsonData); 
 

 
// after this you can access object members again 
 

 
console.log('groups[0]: ', restoredData.groups[0]);

+0

Sie haben Recht, ich habe eine mögliche Lösung in meiner Antwort hinzugefügt. – miquelarranz

+1

Es ist eine gültige JSON-Zeichenfolge, nur ein ungültiges Array, wenn es als eins analysiert wird. '[" Apfel "," Biene "," Auto "," Hunde "," Egos "," Früchte "]' ist keine JSON-Zeichenfolge, sondern nur ein Array-Wert. –

+0

Ich stimme @SpencerWieczorek zu. Ich meine nur, dass es keine gültige JSON-Array-Zeichenfolge ist, die OP wiederherstellen möchte. –

1

Dies passiert, weil "[apple,bee,car,dogs,egos,fruits]" es eine Zeichenfolge ist. Sie müssen es analysieren, bevor Sie auf das Element zugreifen.

Lassen Sie uns sagen, dass Sie die JSON in der Variablen test haben, dann haben wir [ und ] und teilen Sie die Zeichenfolge wie folgt löschen:

test.groups = test.groups.replace("[", "") 
test.groups = test.groups.replace("]", "") 
test.groups = test.groups.split(',') 

Und es enthält dann jetzt:

["apple", "bee", "car", "dogs", "egos", "fruits"] 
0

sollten Sie die Array anders aus der Datenbank zu konstruieren.

Sie erhalten diese Buchstaben, weil sie an der Position in der Zeichenfolge stehen, auf die Sie mit dem Index verweisen.

Betrachten regex und die split() Funktion, sie zu analysieren, wie sie jetzt sind:

var obj = {"groups":"[apple,bee,car,dogs,egos,fruits]", "members":"[g,h,i,j,k,l]"}; 

// Regex replaces the square brackets with blank spaces and splits by the 
// comma into an array 
var groups = obj.replace(/[\[\]']+/g,'').split(','); 
var members = obj.replace(/[\[\]']+/g,'').split(','); 

Jetzt groups[1] kehrt ‚Biene‘.

Lesen Sie mehr über split()here.

+0

Sie wissen viel über Perversionen)) –

+0

Nein, es ist ziemlich wörtlich. –

0

Es funktioniert nicht, da alle Elemente des Arrays in einer Zeichenfolge sind.

Wie bereits erwähnt, ist dies nicht korrekt JSON-Formatierung, aber manchmal haben Sie keine Kontrolle darüber, wie Sie Informationen erhalten. Und obwohl dies nicht empfohlen Antwort ist, können Sie einfach String-Parsing verwenden könnten die Werte, die Sie wollen, indem Sie, so etwas wie zu kommen:

var stuff = JSON.parse('{"groups":"[apple,bee,car,dogs,egos,fruits]", "members":"[g,h,i,j,k,l]"}'); 

var groups = stuff.groups.split("[")[1].split("]")[0].split(","); 
var members = stuff.members.split("[")[1].split("]")[0].split(","); 

console.log(groups); // ["apple", "bee", "car", "dogs", "egos", "fruits"] 
console.log(groups[1]); //bee 
console.log(members[0]); //g 

Ich mag dies keine ideale Lösung wiederholen würde, aber es manchmal ist alles, was Sie tun können.