2017-01-24 4 views
-1

Ich habe jq, um ein Array von JSON-Schlüssel: Wert Paare in ein Array zu extrahieren, aber ich bin nicht sicher, wie man es dann verwenden, um einen HTML-Code zu füllen Wählen Sie Listbox.

Wenn ich durch Hoopla des Hinzufügens von Zeug zum jq-Ausgang gehe, kann ich es lesen, aber vielleicht ist die Antwort darin, den jq-Ausgang zu bekommen, um json genau zu sein, der in einem nicht-anonymen Array ist. Ich bin mir nicht sicher, wie ich das machen soll.

jq ausgibt so etwas wie:

[ 
    { 
    "id": 82247683, 
    "name": "project1" 
    }, 
    { 
    "id": 7700483, 
    "name": "project2" 
    } 
] 

Was mit jquery $ .each funktioniert, ist, wenn das Format statt wie war:

{"project": [ 
    { 
    "id": 82247683, 
    "name": "project1" 
    }, 
    { 
    "id": 7700483, 
    "name": "project2" 
    } 
]} 

ich in der ersten Zeile am wahrsten Sinne des Wortes Anheften Im Moment und die letzte Zeile, um diese Daten wieder als JSON-Daten zu erhalten und sie mit getJSON zum Laufen zu bringen.

Die $ .each Schleife Ich verwende:

<script type="text/javascript"> 
    var $select = $('#project'); 
    $.getJSON('projects.json', function(data) { 
     $select.html(''); 
     $.each(data.project, function(key,val) { 
      $select.append('<option id="'+val.id+'">'+val.name+'</options>'); 
     }) 
    }); 
</script> 

Wegen der getJSON Verwendung sowie mit $ .each (data.project) Ich brauche auf dem Array-Namen und die anderen Elemente heften.

Ich würde von Ihnen Informationen über entweder jq verwenden, um den richtigen json heraus zu bekommen, oder was auch immer ich mit dem getJSON + $ .each tun müsste, um es mit der jq-Ausgabe zu arbeiten, wie es jetzt herauskommt. Benötigt getSchon in diesem Szenario sogar, dass das Array nicht anonym ist?

Das Endergebnis sollte die ausgefüllte Listbox sein.

+0

$ .each nicht, was dieser beiden Formate schert Sie verwenden, so lange wie Sie es geben, was Sie wollen, dass es überlaufen. –

Antwort

0

var data = [ 
 
    { 
 
    "id": 82247683, 
 
    "name": "project1" 
 
    }, 
 
    { 
 
    "id": 7700483, 
 
    "name": "project2" 
 
    } 
 
]; 
 

 
var data2 = { 
 
    "project": [ 
 
    { 
 
     "id": 82247683, 
 
     "name": "project1" 
 
    }, 
 
    { 
 
     "id": 7700483, 
 
     "name": "project2" 
 
    } 
 
    ] 
 
}; 
 

 
console.log('data'); 
 
$.each(data, function(key, val) { 
 
    console.log('<option id="'+val.id+'">'+val.name+'</options>'); 
 
}); 
 

 
console.log('data2'); 
 
$.each(data2.project, function(key, val) { 
 
    console.log('<option id="'+val.id+'">'+val.name+'</options>'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Entweder Format arbeiten. Beachten Sie, dass Sie für data nicht data.project verwenden.

So für Ihr Beispiel:

$.getJSON('projects.json', function(data) { 
    $select.html(''); 
    $.each(data, function(key, val) { 
    $select.append('<option id="'+val.id+'">'+val.name+'</options>'); 
    }) 
}); 
+0

Ich bin mir nicht sicher, wie ich das in meinen Code übersetzen soll. Ich verwende $ .getJSON, während Sie zwei Variablen haben, die nicht durch $ .getJSON definiert sind. Ich habe versucht, etwas wie var data = $ .getJSON ('projects.json'); Das funktioniert aber nicht. Ihre Codes zeigen jedoch, dass $ .each mit anonymen Arrays und benannten Arrays verwendet werden könnte. – archcutbank

+0

Ich versuchte stattdessen, etwas wie var data zu machen; $ .getJSON ('projects.json', function (json) {data = json;} und dann diese Datenvariable zu verwenden, aber das Problem ist meiner Meinung nach das, wenn ich nicht auf {{project}: [und the]} klicke Am Ende werden die Daten nicht als legitime JSON angesehen. – archcutbank

+0

Sie müssen nur 'data.project' in' data' ändern. Ich habe es gerade zu meiner Antwort hinzugefügt. –