2017-12-08 1 views
0

Ich bin ein Array von in . Der Code ist hier:Analysieren und Formatieren von JSON-Array von SQL-Datareader JavaScript

public string ConvertDataTabletoString() { 
    DataTable dt = new DataTable(); 
    // 
    SqlConnection conn = new SqlConnection(); 
    SqlCommand cmd = new SqlCommand(); 
    string connStr = ConfigurationManager.ConnectionStrings["FurnitureDB"].ConnectionString; 
    conn.ConnectionString = connStr; 
    conn.Open(); 
    cmd.CommandType = System.Data.CommandType.StoredProcedure; 
    cmd.Connection = conn; 
    cmd.CommandText = "GetLatLongPins_active"; 
    SqlDataReader datareader = cmd.ExecuteReader(); 
    //var dt = new DataTable(); 
    dt.Load(datareader); 

    //con.Open(); 
    System.Data.SqlClient.SqlDataAdapter da = new SqlDataAdapter(cmd); 
    da.Fill(dt); 
    System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
    List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>(); 
    Dictionary<string, object> row; 

    foreach(DataRow dr in dt.Rows) { 
    row = new Dictionary<string, object>(); 
    foreach(DataColumn col in dt.Columns) { 
     row.Add(col.ColumnName, dr[col]); 
    } 
    rows.Add(row); 
    } 

    return serializer.Serialize(rows); 
} 

Das Array, der zurückgegeben wird wie folgt aussieht:

var markers = JSON.parse('[{"Latitude":34.257179,"Longitude":-119.234190,"Active":true},{"Latitude":34.257179,"Longitude":-119.234190,"Active":true},{"Latitude":40.554306,"Longitude":-81.921422,"Active":true},{"Latitude":40.906651,"Longitude":-97.093629,"Active":true},{"Latitude":29.431261,"Longitude":-97.171709,"Active":true},{"Latitude":34.257179,"Longitude":-119.234190,"Active":true},{"Latitude":34.257179,"Longitude":-119.234190,"Active":true},{"Latitude":40.554306,"Longitude":-81.921422,"Active":true},{"Latitude":40.906651,"Longitude":-97.093629,"Active":true},{"Latitude":29.431261,"Longitude":-97.171709,"Active":true}]'); 

Ich brauche es zu analysieren, so dass es wie dies für die Google Maps API aussieht:

var waypts = [{ 
    location: '34.257179, -119.234190', 
    stopover: true 
}, { 
    location: '34.257179, -119.234190', 
    stopover: true 
}, { 
    location: '40.554306, -81.921422', 
    stopover: true 
}, { 
    location: '40.906651, -97.093629', 
    stopover: true 
}, { 
    location: '29.431261, -97.171709', 
    stopover: true 
}, ] 

Ich habe eine Reihe von Variationen versucht, wenn ich es auf nur ein Stück zurückschneiden kann ich das Ergebnis erstellen, das ich will, zum Beispiel:

Dies erzeugt die Ausgabe Ich brauche für Google Maps

Ort: 34,257179, -119,23419, etappen: true

Aber wenn ich versuche, eine Schleife über die Daten zu tun, ich bin kämpfen, damit es funktioniert. Einer meiner Versuche sieht so aus:

var obj = JSON.parse('{"Latitude":34.257179,"Longitude":-119.234190,"Active":true}', { 
    "Latitude": 29.431261, 
    "Longitude": -97.171709, 
    "Active": true 
}] 
'); 


for (i = 0; i < obj.length; i++) { 
    x += obj.Latitude[i] + "<br>"; 
} 

document.getElementById("demo").innerHTML = x; 

Ich teste, indem ich die Ausgabe an ein Ausgabefenster sende. Wenn ich den obigen Code ausführe, bekomme ich nichts, keine Ausgabe. Ich habe versucht, mein Beispiel mit den vielen verfügbaren Beispielen zu korrelieren, hatte aber keinen Erfolg. Danke für die Empfehlungen.

Hier ist ein Stack-Snippet basierend auf der Anfrage, die ich zuvor nicht verwendet hatte, aber ich sehe, dass mein Code einen Fehler erzeugt. Das sollte hilfreich sein. Ich werde das auch weiter betrachten.

<!DOCTYPE html> 
 
<html> 
 

 
<body> 
 

 
    <h2>Create Object from JSON String</h2> 
 

 
    <p id="demo"></p> 
 

 
    <script> 
 
    var x = []; 
 
    var obj = JSON.parse('[{"Latitude":34.257179,"Longitude":-119.234190,"Active":true},{"Latitude":34.257179,"Longitude":-119.234190,"Active":true},{"Latitude":40.554306,"Longitude":-81.921422,"Active":true},{"Latitude":40.906651,"Longitude":-97.093629,"Active":true},{"Latitude":29.431261,"Longitude":-97.171709,"Active":true},{"Latitude":34.257179,"Longitude":-119.234190,"Active":true},{"Latitude":34.257179,"Longitude":-119.234190,"Active":true},{"Latitude":40.554306,"Longitude":-81.921422,"Active":true},{"Latitude":40.906651,"Longitude":-97.093629,"Active":true},{"Latitude":29.431261,"Longitude":-97.171709,"Active":true}]'); 
 

 

 
    for (i = 0; i < obj.length; i++) { 
 
     x += obj.Latitude[i] + "<br>"; 
 
    } 
 

 
    document.getElementById("demo").innerHTML = x; 
 
    </script> 
 

 
</body> 
 

 
</html>

+0

wo die Start C# -Code Stop und die Javascript-Code funktioniert? Kannst du das (clientseitige, nehme ich an) Javascript als [StackSnippet] (https://stackoverflow.blog/2014/09/16/introducing-runnable-javascript-css-and-html-code-snippets/) ? –

+0

Ich habe den StackSnippet im ursprünglichen Post hinzugefügt. Es erzeugt einen Fehler, der hilfreich ist. Ich werde das überprüfen. – bairdmar

+0

Wenn Sie Ihr Javascript in das Javascript-Feld des Snippets trennen, klicken Sie auf die Schaltfläche "Aufräumen". Es gibt einen oder zwei Syntaxfehler, die sofort offensichtlich werden. Auch, [hier ist mehr über JS-Debugging] (https: // www.w3schools.com/js/js_debugging.asp). –

Antwort

0

könnten Sie Array#map verwenden:

Wenn dann Ihre Eingabe:

var obj = JSON.parse('[{"Latitude":34.257179,"Longitude":-119.234190,"Active":true},{"Latitude":34.257179,"Longitude":-119.234190,"Active":true},{"Latitude":40.554306,"Longitude":-81.921422,"Active":true},{"Latitude":40.906651,"Longitude":-97.093629,"Active":true},{"Latitude":29.431261,"Longitude":-97.171709,"Active":true},{"Latitude":34.257179,"Longitude":-119.234190,"Active":true},{"Latitude":34.257179,"Longitude":-119.234190,"Active":true},{"Latitude":40.554306,"Longitude":-81.921422,"Active":true},{"Latitude":40.906651,"Longitude":-97.093629,"Active":true},{"Latitude":29.431261,"Longitude":-97.171709,"Active":true}]'); 

Durch die Verwendung von:

var waypts = obj.map(function(x) { 
    return { 
    location: x.Latitude + ", " + x.Longitude, 
    stopover: true 
    }; 
}); 

wird das Ergebnis sein:

[ 
    { 
    "location": "34.257179, -119.23419", 
    "stopover": true 
    }, 
    { 
    "location": "34.257179, -119.23419", 
    "stopover": true 
    }, 
    { 
    "location": "40.554306, -81.921422", 
    "stopover": true 
    }, 
    { 
    "location": "40.906651, -97.093629", 
    "stopover": true 
    }, 
    { 
    "location": "29.431261, -97.171709", 
    "stopover": true 
    }, 
    { 
    "location": "34.257179, -119.23419", 
    "stopover": true 
    }, 
    { 
    "location": "34.257179, -119.23419", 
    "stopover": true 
    }, 
    { 
    "location": "40.554306, -81.921422", 
    "stopover": true 
    }, 
    { 
    "location": "40.906651, -97.093629", 
    "stopover": true 
    }, 
    { 
    "location": "29.431261, -97.171709", 
    "stopover": true 
    } 
] 

Etwas wie folgt aus:

(function() { 
 
    var obj = JSON.parse('[{"Latitude":34.257179,"Longitude":-119.234190,"Active":true},{"Latitude":34.257179,"Longitude":-119.234190,"Active":true},{"Latitude":40.554306,"Longitude":-81.921422,"Active":true},{"Latitude":40.906651,"Longitude":-97.093629,"Active":true},{"Latitude":29.431261,"Longitude":-97.171709,"Active":true},{"Latitude":34.257179,"Longitude":-119.234190,"Active":true},{"Latitude":34.257179,"Longitude":-119.234190,"Active":true},{"Latitude":40.554306,"Longitude":-81.921422,"Active":true},{"Latitude":40.906651,"Longitude":-97.093629,"Active":true},{"Latitude":29.431261,"Longitude":-97.171709,"Active":true}]'); 
 

 
    var waypts = obj.map(function(x) { 
 
    return { 
 
     location: x.Latitude + ", " + x.Longitude, 
 
     stopover: true 
 
    }; 
 
    }); 
 
    console.log(waypts); 
 
})();
.as-console-wrapper { 
 
    position: absolute; 
 
    top: 0; 
 
}

+0

Super, danke dafür. Es hat perfekt funktioniert. Bevor ich das gesehen habe, konnte ich auch eine praktikable Lösung finden, indem ich die richtige Zeichenfolge in C#, wie von dbc vorgeschlagen, erstelle, aber das hilft mir, die JavaScript-Seite etwas besser zu verstehen. – bairdmar

Verwandte Themen