2012-02-02 83 views
2

我有一个C#方法,它会生成Google图表需要的JSON字符串。这样的输出看起来有点像这样:生成Google Chart JSON数组

[ [{ v: 'Mike', f: 'Mike' }, '', 'The President'], [{ v: 'Jim', f: 'Jim Vice President' }, 'Mike', 'VP'], ['Alice', 'Mike', ''], ['Bob', 'Jim', 'Bob Sponge'], ['Carol', 'Bob', ''] ] 

我正在尝试从使用getJSON我的JavaScript内这些数据,并返回一个JsonResult的方法。但是,Javascript会(正确)不会将它解析为数组,因为我正在使用字符串。

我该如何克服这个问题?我想我应该从数组中生成我的C#JsonResult,因为这是数据。然而,谷歌的格式不完全适合这...

在此先感谢。

+1

这不是有效的JSON字符串。双引号需要围绕键和字符串值。 – 2012-02-02 00:27:53

+1

...如果您提到的'getJSON'是jQuery的,它会自动为您解析字符串,但它必须是有效的。 – 2012-02-02 00:29:00

+1

这就是问题所在;谷歌图表似乎坚持这种特定的格式。也许我将不得不继续生成它作为一个字符串,但我怎么能然后将其转换为我的Javascript中的数组? – Jonathan 2012-02-02 00:30:51

回答

2

如果文本不能进行有效的JSON,您可能需要使用eval ...

var arr = eval(response_string); 

还是有它使用Function构造eval'd ...

var arr = Function('return ' + response_string)(); 

...但在这两种情况下,请确保您信任正在发送的数据。


这两种技术都会将字符串评估为JavaScript代码,因此只要JavaScript语法有效,就会发送任何内容。

0

getJSON将解析您的方法返回的“字符串”结果。但是,如果您要返回带有字符串的JsonResult作为您的参数,则只需编码该字符串,然后在客户端将其解析为字符串。

如果要返回一个对象数组,然后将一个对象数组设置为Data参数,它将自动序列化为JSON。

1

documentation

重要:对于jQuery 1.4,如果JSON文件包含语法错误,请求通常会失败默默。出于这个原因避免频繁手动编辑JSON数据。 JSON是与那些比javascript的对象文字符号

的严格作为一个评论者指出的那样,你的JSON是无效的语法规则的数据交换格式。这:

[ [{ v: 'Mike', f: 'Mike' }, .... 

应该是:

[ [{ "v": "Mike", "f": "Mike" }, .... 

另外,还要确保您的JSON是不小心在"字符包围。您可以测试JSON字符串的有效性here

一旦你做到了这一点,传递给你的回调data应该是你正在寻找的数组:

$.getJSON('url.json', function(data) { 
    // data is the array you're looking for 
}); 

如果你的问题是,你需要生成的对象转换成Charts API的字符串,请看JSON.stringify()。如果您需要支持不实现它的浏览器,则可以找到链接here的实现。

0

都说 “S” 是返回的字符串,x将包含JavaScript对象:

var s = "[ [{ v: 'Mike', f: 'Mike' }, '', 'The President'], [{ v: 'Jim', f: 'Jim Vice President' }, 'Mike', 'VP'], ['Alice', 'Mike', ''], ['Bob', 'Jim', 'Bob Sponge'], ['Carol', 'Bob', ''] ]" 
var x = eval("y=" + s)