正在生成Google图表JSON数组

Generating Google Chart JSON array

本文关键字:图表 JSON 数组 Google      更新时间:2023-09-26

我有一个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和一个返回JsonResult的方法从我的Javascript中检索这些数据。然而,Javascript不会(正确地)将其解析为数组,因为我使用的是字符串。

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

提前谢谢。

如果文本不能成为有效的JSON,您可能需要使用eval。。。

var arr = eval(response_string);

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

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

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


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

来自文档:

重要提示:从jQuery 1.4开始,如果JSON文件包含语法错误,请求通常会以静默方式失败。因此,避免频繁手动编辑JSON数据。JSON是一种数据交换格式,其语法规则比JavaScript的对象文字符号更严格

正如一位评论者所指出的,您的JSON是无效的。此:

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

应该是:

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

还要确保JSON不会意外地被"字符包围。您可以在此处测试JSON字符串的有效性。

完成后,传递给回调的data应该是您要查找的数组:

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

如果您的问题是需要将结果对象转换为Charts API的字符串,请查看JSON.stringify()。如果您需要支持不实现它的浏览器,您可以在这里找到一个链接的实现。

getJSON将解析方法返回的"字符串"结果。然而,如果您返回的JsonResult中有一个字符串作为参数,那么它只是对该字符串进行编码,然后在客户端上解析为字符串。

如果您想返回一个对象数组,那么将一个对象阵列设置为Data参数,它将自动序列化为JSON。

假设"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)