我有一个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,因为这就是数据。但是,谷歌的格式并不适合这个......
提前致谢。
答案 0 :(得分:2)
如果文本无法生成有效的JSON,您可能需要使用eval
...
var arr = eval(response_string);
或者使用Function
构造函数进行评估...
var arr = Function('return ' + response_string)();
...但在这两种情况下,请确保您信任正在发送的数据。
这两种技术都会将字符串评估为JavaScript代码,因此只要JavaScript语法有效,就会运行所发送的任何内容。
答案 1 :(得分:1)
重要提示:从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)