2015-07-21 72 views
2

我知道这个问题已被问过无数次,但我真的不明白。JSON到JavaScript,SyntaxError:意外的令牌&

我在MVC中创建一个站点,并且从我的模型创建一个JSON字符串。然后,我想将它作为参数传递给使用它来绘制图形的JavaScript函数。

这里是我创建JSON字符串。这确实创建了一个有效的JSON字符串,我在JSONLint处进行了检查。

@{ 
    var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
    var weightsAsJsonString = serializer.Serialize(Enumerable.Select(Model, weight => 
     new 
     { 
      date = weight.Date, 
      value = weight.Value 
     })); 
} 

再往下我从中创建一个JavaScript变量,并传递到JavaScript函数:

var jsonStringToGraph = @weightsAsJsonString;  
google.setOnLoadCallback(drawVisualization(jsonstring)); 

当运行此,控制台打印“的SyntaxError:意外令牌&”在该行是我声明jsonStringToGraph。我搜索了一下,得出结论说我应该在@weightsAsJsonString附近放置,所以我这样做。

不管怎样,在我的drawVisualization,我这样做:

function drawVisualization(teststring) { 
    ....... 
    var parsedJson = JSON.parse(teststring); 

这给了我SyntaxError: Unexpected token & Index:1 我知道,在底部的代码是什么原因造成的例外,但我不明白为什么。有谁明白我做错了什么?

编辑:这是weightsAsJsonString

[{"date":"\/Date(1434492000000)\/","value":100.2},{"date":"\/Date(1434578400000)\/","value":99.2},{"date":"\/Date(1434664800000)\/","value":101.2},{"date":"\/Date(1434751200000)\/","value":98.2},{"date":"\/Date(1434837600000)\/","value":97.2},{"date":"\/Date(1434924000000)\/","value":96.2},{"date":"\/Date(1435010400000)\/","value":95.2},{"date":"\/Date(1435096800000)\/","value":94.2}] 
+0

你能提供一个'jsonStringToGraph'的样子吗?为了弄清楚什么是错误的,我必须实际看到语法。 –

+0

我不能在那里设置断点,但我添加了它从 – hellogoodnight

回答

2

听起来像你的问题是试图通过Razor将内容注入JavaScript。默认情况下,@将对您的内容进行HTML编码,而这在JavaScript的上下文中不起作用。

@Html.Raw(weightsAsJsonString)会工作得更好,然后你的JS将有一个JavaScript对象,所以稍后不需要JSON.parse

+0

感谢您抽出时间,我现在会检查它 – hellogoodnight

+0

所以你的意思是我喜欢这样: 'var objects = @ Html.Raw(weightsAsJsonString); google.setOnLoadCallback(drawVisualization(objects));'? – hellogoodnight

+1

是的,但你必须删除'JSON。从'drawVisualization'解析',因为它不是JSON,而是一个JavaScript对象。 – Jacob

0

当你做var jsonStringToGraph = @weightsAsJsonString;你实际上是定义一个JSON 对象,而不是一个JSON

因此,当你做JSON.parse(teststring);你试图解析一个对象而不是一个字符串。

要么在第一个声明var jsonStringToGraph = '@weightsAsJsonString';周围放置撇号,或者根本不要尝试再次解析它。

+0

中读取的变量。我确实在我的第一个声明中放置了apostrphes,这是发生了什么事情: 当我运行'var objects = JSON.parse(teststring);'在JavaScript函数中,抛出'SyntaxError:Unexpected token&Index:1'。感谢您的帮助 – hellogoodnight