javascript将预格式化的数组字符串转换为js

时间:2016-10-25 23:21:27

标签: javascript c# asp.net-web-api2

我希望这是一个简单的问题,虽然可能是我从一开始就采取了错误的方式,所以让我解释一下。

我正在谷歌地图上绘制多边形,因为用户拖动/缩放地图。因此,在dragend / zoom更改时,我会触发一个调用webAPI的javascript方法,该方法返回一个"字符串"预先格式化为javascript数组格式(过去我们使用<%= getdata()%>没有问题。

字符串通常很长,但只有3点的样本在这里:

"{lat: 36.206133, lng: -95.81533},{lat: 36.222298, lng: -95.814961},{lat: 36.22445, lng: -95.81527}"

现在,我确切地看到了正在发生的事情。我只是不知道如何解决它。它将它视为一个字符串,所以当我尝试:

var array = [data]; (其中data是上面返回的字符串),它失败,因为它不是预期的坐标对象数组,而是字符串的单个成员数组。

所以...一个有两个部分的问题:1,有没有更好的方法来做到这一点,如果没有,我该如何投射"字符串"作为坐标对象的数组,就像直接输入到javascript一样?

谢谢,

2 个答案:

答案 0 :(得分:1)

正如@jmesolomon已经评论过,你可以/应该使用JSON.parse来做这件事。

但是,这需要输入字符串是有效的JSON格式。目前情况并非如此,因为有两件事:

1)对象的键不是'string'类型。 更改:用双引号包裹键。

2)响应实际上是逗号分隔的对象列表,但未定义为数组,因为没有匹配的'['+']'标记。 更改:通过添加“['+']'标记,确保WebAPI将响应格式化为实际的javascript数组。

实施例

var originalInput = "{lat: 36.206133, lng: -95.81533},{lat: 36.222298, lng: -95.814961},{lat: 36.22445, lng: -95.81527}";

var workingInput ='{"lat": 36.206133, "lng": -95.81533},{"lat": 36.222298, "lng": -95.814961},{"lat": 36.22445, "lng": -95.81527}';

var betterInput ='[{"lat": 36.206133, "lng": -95.81533},{"lat": 36.222298, "lng": -95.814961},{"lat": 36.22445, "lng": -95.81527}]';

console.log("workingInput", JSON.parse("[" + workingInput + "]"));
console.log("betterInput", JSON.parse(betterInput));

答案 1 :(得分:0)

快速而肮脏:

eval("["+data+"]");

当然,如果其他人在您的数据字符串中注入代码,这是一个安全问题。