2016-04-25 10 views
2

Ich erstelle gerade ein Tool, mit dem Benutzer ihren Status und ihre Kategorie eingeben können, um zu sehen, was die 3 Preispläne sind. Diese 2 Auswahlen (Staat/Kategorie) werden über Auswahlfeld aufgenommen werden, und die Daten, die diese Zahlen enthält, ist in einer JSON-Datei:Erhalte einen JSON-Schlüssel basierend auf einem Benutzer Wähle

[{ 
    "Alabama/Category1/Price1":"$123,123 ", 
    "Alabama/Category1/Price2":"$123,123 ", 
    "Alabama/Category1/Price3":"$123,123 ", 
    "Alabama/Category2/Price1":"$345,345 ", 
    "Alabama/Category2/Price2":"$345,345 ", 
    "Alabama/Category2/Price3":"$345,345 ", 
    "Alabama/Category3/Price1":"$456,789 ", 
    "Alabama/Category3/Price2":"$456,789 ", 
    "Alabama/Category3/Price3":"$456,789 ", 
    "Alabama/Category4/Price1":"$321,321 ", 
    "Alabama/Category4/Price2":"$321,321 ", 
    "Alabama/Category4/Price3":"$321,321 ", 
    "Alaska/Category1/Price1":"$123,123 ", 
    "Alaska/Category1/Price2":"$123,123 ", 
    "Alaska/Category1/Price3":"$123,123 ", 
    "Alaska/Category2/Price1":"$345,345 ", 
    "Alaska/Category2/Price2":"$345,345 ", 
    "Alaska/Category2/Price3":"$345,345 ", 
    "Alaska/Category3/Price1":"$456,789 ", 
    "Alaska/Category3/Price2":"$456,789 ", 
    "Alaska/Category3/Price3":"$456,789 ", 
    "Alaska/Category4/Price1":"$321,321 ", 
    "Alaska/Category4/Price2":"$321,321 ", 
    "Alaska/Category4/Price3":"$321,321 ", 
}] 

Grundsätzlich auf die Schaltfläche klicken, würde Ich mag über die JSON-Datei Schleife und erhalten der Status/die Kategorie basiert auf den Benutzerauswahlen. Da es einige "/" in diesem Schlüsselpfad gibt, habe ich versucht, die Benutzerauswahl in einer Variablen zu speichern, so dass ich jeden Preispunkt auswählen und auf der Seite anzeigen konnte. Meine Art und Weise, zu versuchen, es in einer Variablen wie so wurde stashing:

var test = stateSelected + '/' + categorySelected + '/Price1'; 

Dies ist jedoch nicht funktioniert, und frage mich, ob es eine weitere Erkenntnis war, wie dies zu erreichen? Wenn man ein anderes Material liest, scheint es, als würden einige $ .parseJSON empfehlen, aber das funktioniert auch nicht. Dafür habe ich verwendet:

$.getJSON("json_data.json", function(obj) { 
      $.each($.parseJSON(data), function(key, value) { 

       //code here 
      }); 
     }); 

Sorry für die Langlebigkeit auf das, aber zu oft auf dieser Seite habe ich nicht genügend Informationen für Menschen, das wirkliche Problem zu verstehen, in der Lage sein zu sehen Menschen geben, und ich hoffe, ich habe habe meine richtig umrissen. Jede Hilfe dazu wäre willkommen. Vielen Dank!

EDIT: Auch wenn Sie denken, dass es eine andere Möglichkeit gibt, die JSON-Daten als die, die ich hier habe, zu präsentieren, lassen Sie es mich wissen. Die Daten werden über Tabellenkalkulation aktualisiert und ich habe ein Excel -> JSON-Übersetzer-Tool verwendet, und so hat es die Daten zurückgespuckt.

+0

Was sind 'Daten' in' $ .parseJSON (Daten) '? Warum benutzt dein Code nicht 'obj'? – Barmar

+0

Ihre JSON-Datei enthält ein Array von Objekten. Warum ist es in einem Array? Was passiert, wenn derselbe "Status/Kategorie/Preis" in mehreren Elementen im Array enthalten ist? – Barmar

+0

Gibt 'obj [0] [test]' nicht zurück was du willst? – Barmar

Antwort

-1

Wenn Sie können verändern die Art und Weise der JSON dann dargestellt wird, warum die Daten nicht speichern, etwa so:

var options = { 
    "Alabama/Category1" : { 
     "Price1":"$123,123 ", 
     "Price2":"$123,123 ", 
     "Price3":"$123,123 " 
    }, 
    "Alabama/Category2" : { 
     "/Price1":"$345,345 ", 
     "Price2":"$345,345 ", 
     "Price3":"$345,345 " 
    } 
    ... 
} 

Dann erhalten Sie die Eingaben des Benutzers Schrägstrich und für diese Kombination von Staat alle Preise Optionen erhalten und Kategorie?

test = stateSelected + '/' + categorySelected; 
var priceOptions = options[test]; 
1

Ich würde das JSON-Format auf folgende Weise:

var options = { 
    Alabama: { 
    Category1: { 
     Price1: "$123, 123", 
     Price2: "$123, 123", 
    } 
    } 
} 

und dann:

var priceOptions = options[stateSelected][categorySelected]; 
+1

Ich stimme zu, dies wäre der einfachste Weg, um auf den JSON zuzugreifen. Das einzige Problem hier ist, dass die Art, wie das Tool (https://shancarter.github.io/mr-data-converter/) die Excel-Daten exportiert, die ich bekomme, die Art ist, wie ich es oben gepostet habe. Wenn Sie ein Tool kennen, das Tabellendaten in der von Ihnen genannten Weise exportiert, würde ich mich freuen, wenn Sie es teilen möchten!Schließlich werden die Daten jetzt zusammengestellt, so dass ich fragen kann, wer die Daten in die Tabellenkalkulation eingibt, um sie in jede Form zu bringen, die ich auch von ihnen erwarte. Danke noch einmal! –

+0

Sie können eine weitere Frage erstellen, in der Sie fragen können, wie Sie die Excel-Datei in diese Form von JSON transformieren und ein Beispiel der Excel-Datei hochladen und den mr-data-converter erwähnen. –

+0

Das JSON-Format, das Sie oben angegeben haben, ist in JSON-Validatoren ungültig. Sie glauben nicht, dass Sie mein ursprüngliches JSON-Format verwenden können? Auch wenn es ein langer Workaround ist? –

0

Wenn Sie nicht die JSON ändern dann werden Sie durchlaufen müssen durch jede Taste im Objekt:

function getPricePoints(state, category, onComplete) 
{ 
    $.getJSON("json_data.json", function(obj) 
    { 
     var result = {}; 
     for(key in obj) 
     { 
      if(obj.hasOwnProperty(key) && key.indexOf(state + "/" + category + "/") == 0) 
      { 
       result[key] = obj[key]; 
      } 
     } 

     onComplete(result); 
    }); 
} 
Verwandte Themen