2016-12-19 3 views
0

Ich versuche, eine loadrunner-Datei 'js' zu erstellen, um einige Daten von einem json zu erfassen. Die JSON-Datei befindet sich auf einem Web-Server, dies ist nicht das Problem. Ich kann den JSON erfolgreich abrufen. Ich möchte jedoch einen bestimmten Wert aus dem JSON-Text zurückgeben. Ich habe versucht, dies auf einer lokalen HTML-Seite zu tun, wie folgt, aber ich habe immer eine Fehlermeldung erhalten:LoadRunner-Skript zum Erfassen von Json-Daten erstellen

Error is TypeError: Cannot read property 'Location' of undefined

Code:

<!doctype html> <head></head><script> 

function getdata() 
{ 
var jsontext = '{"Locations":{"Location":[{"@id":"3649","@latitude":"51.758","@longitude":"-1.576","@country":"England","@zoomLevel":"10","@obsZoomLevel":"5","@type":"Observing Site","@name":"Brize Norton","@geohash":"gcnyknk2h"},{"@id":"3","@latitude":"50.9503","@longitude":"-1.3567","@country":"England","@zoomLevel":"11","@type":"Airport and Heliport","@name":"Southampton Airport","@geohash":"gcp1c5hp4"}]}}'; 
var stringifiedjson = JSON.stringify(jsontext).replace(/@/g, '_'); //convert to JSON string 
var data = JSON.parse(stringifiedjson); 
json.innerHTML=data; 

try{ 
var newlocation0 = data.Locations.Location[1]._id; 
output.innerHTML=newlocation0; 
return; 

} 
catch(err){ 
    message.innerHTML = "(1)Error is " + err; 
} 

try{ 
var newlocation0 = data.Locations.Location[1]._id; 
output.innerHTML=newlocation0; 
return; 
} 
catch(err) { 
     message.innerHTML = message.innerHTML + "(2)Error is " + err; 
    } 

try{ 
var newlocation0 = data.Locations.Location[0]._id; 
output.innerHTML=newlocation0; 
return; 
} 
catch(err) { 
     message.innerHTML = message.innerHTML + "(3)Error is " + err; 
    } 
} 
</script> 
<body> 
Error Messages: 
<p id="message"></p> 
<BR><BR> 
JSON Input: 
<p id="json"></p> 
<BR><BR> 
Output: 
<p id="output"></p> 



<button onclick="getdata()">Check</button> 
<button onclick="location.reload();">Reload</button> 

</body> 

Ich habe versucht, verschiedene Kombinationen von Notationen von [0] und [1] aber ich kann keine Ausgabe für den rechten Teil des JSons erhalten.

+0

Warum? Var stringifiedjson = JSON.stringify (jsontext) '? Das wird alle '' 'entkommen lassen und Ihren JSON unparserfähig machen. Wenn Sie danach eine JSON.parse machen, ist die Ausgabe kein JS-Objekt, sondern nur eine Zeichenkette. Ersetzen Sie den Teil' var stringifiedjson = JSON.stringify (jsontext) .replace (/ @/g, '_'); 'nach' var stringifiedjson = jsontext.replace (/ @/g, '_'); ' – Fefux

+0

Ich habe es jetzt funktioniert, danke für deine Hilfe! stringify so wie ich unter dem Eindruck war das war die einzige Möglichkeit, die widerspenstigen "@" in der Json. – jquerynewbie

+0

"LoadRunner", wie in der Performance-Test-Tool LoadRunner? Wenn ja, sind in Elemente zur Behandlung der Korrelation gebaut, die Die Daten, die vom Server an den Client zurückgegeben werden, umfassen alle Arten von Daten in einem HTTP-Datenstrom (oder anderen Protokollen). Dies würde auch JSON-formatierte Daten umfassen. –

Antwort

1

jsontext ist zunächst ein String

var jsontext = '{"Locations":{"Location":[{"@id":"3649","@latitude":"51.758","@longitude":"-1.576","@country":"England","@zoomLevel":"10","@obsZoomLevel":"5","@type":"Observing Site","@name":"Brize Norton","@geohash":"gcnyknk2h"},{"@id":"3","@latitude":"50.9503","@longitude":"-1.3567","@country":"England","@zoomLevel":"11","@type":"Airport and Heliport","@name":"Southampton Airport","@geohash":"gcp1c5hp4"}]}}'; 

Sie diese Zeichenfolge in eine andere Zeichenfolge wie diese

var stringifiedjson = JSON.stringify(jsontext).replace(/@/g, '_'); 

die resultierende Zeichenfolge gibt die innere JSON Parsen einmal gewickelt haben

""{\"Locations\":{\"Location\":[{\"_id\":\"3649\",\"_latitude\":\"51.758\",\"_longitude\":\"-1.576\",\"_country\":\"England\",\"_zoomLevel\":\"10\",\"_obsZoomLevel\":\"5\",\"_type\":\"Observing Site\",\"_name\":\"Brize Norton\",\"_geohash\":\"gcnyknk2h\"},{\"_id\":\"3\",\"_latitude\":\"50.9503\",\"_longitude\":\"-1.3567\",\"_country\":\"England\",\"_zoomLevel\":\"11\",\"_type\":\"Airport and Heliport\",\"_name\":\"Southampton Airport\",\"_geohash\":\"gcp1c5hp4\"}]}}"" 

sieht Zeichenkette

var data = JSON.parse(stringifiedjson); 

das Objekt von String erhalten erneut analysiert

data = JSON.parse(data); 

ODER

gibt es keine Notwendigkeit für JSON.stringify in erster Linie ist, können Sie einfach die Methode ersetzen verwenden.

+0

Funktioniert die Ersetzungsmethode, wenn ich ein '' ersetze ''? @ "Charakter. Wenn ja, wie würde ich das tun? – jquerynewbie

+0

tun Sie einfach jsontext.replace (/ @/g, '_'); statt JSON.stringify (jsontext) .replace (/ @/g, '_'); Ich habe es in der Konsole versucht, es funktionierte für mich –

+0

Dies funktioniert als ein Einzeiler 'Dies kann tatsächlich ein Einzeiler sein' testjsonout.innerHTML = "0:" + (JSON.parse (replaceAll (jsontext, '@' , '_'))). Locations.Location [0] ._ id; ' – jquerynewbie

Verwandte Themen