【问题标题】:Generating Google Chart JSON array生成谷歌图表 JSON 数组
【发布时间】:2012-02-24 16:50:28
【问题描述】:

我有一个 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,因为这就是数据。但是,Google 的格式并不完全适合此...

提前致谢。

【问题讨论】:

  • 那不是一个有效的 JSON 字符串。键和字符串值需要双引号。
  • ...如果你提到的getJSON是jQuery的,它会自动为你解析字符串,但它必须是有效的。
  • 这就是问题所在;谷歌图表似乎坚持这种特定格式。也许我将不得不继续将它作为字符串生成,但是我怎样才能将它转换为我的 Javascript 中的数组?
  • Google Chart API 不只是接受一个 Javascript 对象吗?我确定无效的 JSON 是这里的问题。
  • @Simon,查看您的数组数组的第一项。有时像{"v": "Mike","f": "Mike"} 这样的对象有时是字符串。

标签: c# javascript json getjson


【解决方案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】:

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

    var arr = eval(response_string);
    

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

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

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


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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-05-30
          • 1970-01-01
          • 2013-06-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-23
          相关资源
          最近更新 更多