Ich habe Schwierigkeiten mit der Syntax und Struktur von JSON-Objekten/Arrays.
{
"accounting" : [
{ "firstName" : "John",
"lastName" : "Doe",
"age" : 23 },
{ "firstName" : "Mary",
"lastName" : "Smith",
"age" : 32 }
],
"sales" : [
{ "firstName" : "Sally",
"lastName" : "Green",
"age" : 27 },
{ "firstName" : "Jim",
"lastName" : "Galley",
"age" : 41 }
]
}
Ich möchte eine verschachtelte Struktur von Objekten und Arrays erstellen, die die folgenden Informationen enthalten würde:
{
"problems": [{
"Diabetes":[{
"medications":[{
"medicationsClasses":[{
"className":[{
"associatedDrug":[{
"name":"asprin",
"dose":"",
"strength":"500 mg"
}],
"associatedDrug#2":[{
"name":"somethingElse",
"dose":"",
"strength":"500 mg"
}]
}],
"className2":[{
"associatedDrug":[{
"name":"asprin",
"dose":"",
"strength":"500 mg"
}],
"associatedDrug#2":[{
"name":"somethingElse",
"dose":"",
"strength":"500 mg"
}]
}]
}]
}],
"labs":[{
"missing_field": "missing_value"
}]
}],
"Asthma":[{}]
}]}
Aber ich habe keine Ahnung, wie der richtige Weg dafür sein sollte. Soll ich nur JavaScript-Objekte erstellen? Ist JSON für dieses Projekt sinnvoll?
Was ist die richtige Syntax, um so etwas aufzustellen?
Hier ist mein Code bisher:
$(document).ready(function() {
$.getJSON('js/orders.json', function(json) {
$.each(json.problems, function(index, order) {
$('.loadMeds').append('<p>' + order.name + '</p>')
});
});
});
Der erste Code ist ein Beispiel für Javascript-Code, der ähnlich ist, jedoch nicht JSON. JSON hätte nicht 1) Kommentare und 2) das Schlüsselwort var
Sie haben keine Kommentare in Ihrem JSON, aber Sie sollten die var
entfernen und wie folgt beginnen:
orders: {
Die [{}]
-Notation bedeutet "Objekt in einem Array" und ist nicht das, was Sie überall brauchen. Es ist kein Fehler, aber für manche Zwecke zu kompliziert. AssociatedDrug sollte als Objekt gut funktionieren:
"associatedDrug": {
"name":"asprin",
"dose":"",
"strength":"500 mg"
}
Die leeren Objektlabors sollten auch mit etwas gefüllt werden.
Ansonsten ist Ihr Code in Ordnung. Sie können es entweder in Javascript einfügen oder die JSON.parse()
-Methode oder eine andere Parsing-Methode verwenden (bitte eval nicht verwenden )
Update 2 beantwortet:
obj.problems[0].Diabetes[0].medications[0].medicationsClasses[0].className[0].associatedDrug[0].name
gibt 'Aspirin' zurück. Es ist jedoch für foreaches überall besser geeignet
Ich habe mein Problem erfolgreich gelöst. Hier ist mein Code:
Das komplexe JSON-Objekt:
{
"medications":[{
"aceInhibitors":[{
"name":"lisinopril",
"strength":"10 mg Tab",
"dose":"1 tab",
"route":"PO",
"sig":"daily",
"pillCount":"#90",
"refills":"Refill 3"
}],
"antianginal":[{
"name":"nitroglycerin",
"strength":"0.4 mg Sublingual Tab",
"dose":"1 tab",
"route":"SL",
"sig":"q15min PRN",
"pillCount":"#30",
"refills":"Refill 1"
}],
"anticoagulants":[{
"name":"warfarin sodium",
"strength":"3 mg Tab",
"dose":"1 tab",
"route":"PO",
"sig":"daily",
"pillCount":"#90",
"refills":"Refill 3"
}],
"betaBlocker":[{
"name":"metoprolol tartrate",
"strength":"25 mg Tab",
"dose":"1 tab",
"route":"PO",
"sig":"daily",
"pillCount":"#90",
"refills":"Refill 3"
}],
"diuretic":[{
"name":"furosemide",
"strength":"40 mg Tab",
"dose":"1 tab",
"route":"PO",
"sig":"daily",
"pillCount":"#90",
"refills":"Refill 3"
}],
"mineral":[{
"name":"potassium chloride ER",
"strength":"10 mEq Tab",
"dose":"1 tab",
"route":"PO",
"sig":"daily",
"pillCount":"#90",
"refills":"Refill 3"
}]
}
],
"labs":[{
"name":"Arterial Blood Gas",
"time":"Today",
"location":"Main Hospital Lab"
},
{
"name":"BMP",
"time":"Today",
"location":"Primary Care Clinic"
},
{
"name":"BNP",
"time":"3 Weeks",
"location":"Primary Care Clinic"
},
{
"name":"BUN",
"time":"1 Year",
"location":"Primary Care Clinic"
},
{
"name":"Cardiac Enzymes",
"time":"Today",
"location":"Primary Care Clinic"
},
{
"name":"CBC",
"time":"1 Year",
"location":"Primary Care Clinic"
},
{
"name":"Creatinine",
"time":"1 Year",
"location":"Main Hospital Lab"
},
{
"name":"Electrolyte Panel",
"time":"1 Year",
"location":"Primary Care Clinic"
},
{
"name":"Glucose",
"time":"1 Year",
"location":"Main Hospital Lab"
},
{
"name":"PT/INR",
"time":"3 Weeks",
"location":"Primary Care Clinic"
},
{
"name":"PTT",
"time":"3 Weeks",
"location":"Coumadin Clinic"
},
{
"name":"TSH",
"time":"1 Year",
"location":"Primary Care Clinic"
}
],
"imaging":[{
"name":"Chest X-Ray",
"time":"Today",
"location":"Main Hospital Radiology"
},
{
"name":"Chest X-Ray",
"time":"Today",
"location":"Main Hospital Radiology"
},
{
"name":"Chest X-Ray",
"time":"Today",
"location":"Main Hospital Radiology"
}
]
}
Der jQuery-Code, um die Daten zu übernehmen und auf meiner Webseite anzuzeigen:
$(document).ready(function() {
var items = [];
$.getJSON('labOrders.json', function(json) {
$.each(json.medications, function(index, orders) {
$.each(this, function() {
$.each(this, function() {
items.Push('<div class="row">'+this.name+"\t"+this.strength+"\t"+this.dose+"\t"+this.route+"\t"+this.sig+"\t"+this.pillCount+"\t"+this.refills+'</div>'+"\n");
});
});
});
$('<div>', {
"class":'loaded',
html:items.join('')
}).appendTo("body");
});
});
Stellen Sie sicher, dass Sie der Sprachdefinition für JSON folgen. In Ihrem zweiten Beispiel, dem Abschnitt:
"labs":[{
""
}]
Ist ungültig, da ein Objekt aus null oder mehr Schlüsselwertpaaren "a" : "b"
bestehen muss, wobei "b"
ein beliebiger gültiger value sein kann. Einige Parser interpretieren { "" }
möglicherweise automatisch als { "" : null }
. Dies ist jedoch kein klar definierter Fall.
Außerdem verwenden Sie ein verschachteltes -Array von Objekten[{}]
. Ich würde das nur tun, wenn:
Zunächst beinhaltet die Auswahl einer Datenstruktur (xml, json, yaml) normalerweise nur ein Problem mit der Lesbarkeit/Größe. Zum Beispiel
Json ist sehr kompakt, aber kein menschliches Wesen kann es leicht lesen.
XML ist sehr groß, aber jeder kann es leicht lesen/debuggen,
Yaml ist zwischen Xml und Json.
Wenn Sie jedoch stark mit Javascript arbeiten möchten und/oder Ihre Software viel Daten zwischen Browser-Servern überträgt, sollten Sie Json verwenden, da es sich um reines Javascript handelt und sehr kompakt ist. Versuchen Sie nicht, es in einen String zu schreiben, sondern verwenden Sie Bibliotheken, um den Code zu generieren, den Sie aus einem Objekt benötigen.
Hoffe das hilft.
Sie können mit dieser Funktion versuchen, ein beliebiges Objekt in verschachtelten geschachtelten Arrays von Kings-Arrays zu finden.
Beispiel
function findTByKeyValue (element, target){
var found = true;
for(var key in target) {
if (!element.hasOwnProperty(key) || element[key] !== target[key]) {
found = false;
break;
}
}
if(found) {
return element;
}
if(typeof(element) !== "object") {
return false;
}
for(var index in element) {
var result = findTByKeyValue(element[index],target);
if(result) {
return result;
}
}
};
findTByKeyValue(problems,{"name":"somethingElse","strength":"500 mg"}) =====> result equal to object associatedDrug#2