生成Google Chart JSON数组

时间:2012-02-02 00:22:50

标签: c# javascript json getjson

我有一个C#方法,可以生成Google图表需要的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,因为这就是数据。但是,谷歌的格式并不适合这个......

提前致谢。

4 个答案:

答案 0 :(得分:2)

如果文本无法生成有效的JSON,您可能需要使用eval ...

var arr = eval(response_string);

或者使用Function构造函数进行评估...

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

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


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

答案 1 :(得分: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的实现。

答案 2 :(得分:0)

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

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

答案 3 :(得分: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)