【问题标题】:How to output JSON in python so it can be used for Geckoboard's Highcharts plugin如何在 python 中输出 JSON,以便它可以用于 Geckoboard 的 Highcharts 插件
【发布时间】:2012-09-14 23:04:45
【问题描述】:

我觉得有一个相当简单的解决方案可以解决我的问题。

我正在做一些数据处理,最终以highcharts 的格式打印出来。目前,我正在将整套嵌套字典分开并打印出每个部分,但我希望有类似 JSON.dumps(dict) 的输出格式化为所有未引用的键。所以,在代码中:

{
    'chart': {'backgroundColor': 'Blue',
              'borderColor': 'Black',
              'renderTo': 'container'},
    'xAxis': { ... },
...
}

输出到

{
    chart: {
        backgroundColor: 'Blue',
        borderColor: 'Black',
        renderTo: 'container'},
    xAxis: { ... },
...
}

如果我不能像这样输出,有没有一种从 python 与 HighCharts 交互的好方法?尽管有一些合理的 Google-Fu,但我还没有真正遇到过。

编辑:我正在努力使其与Geckoboard - Highcharts plugin 兼容,其中我无法访问 javascript 解析输出的全部功能。当我发送数据时,我需要将其格式化并准备好滚动。

【问题讨论】:

    标签: python json formatting highcharts


    【解决方案1】:

    是的。您必须在客户端(使用 javascript)解码字符串:

    JSON.parse('{"background": "black"}')
    

    此方法将返回您可以传递给 Highcharts 的 javascript 对象。

    所以你需要将你的 python 输出保存为 js 字符串,然后将其转换为 JS-object。

    【讨论】:

    • 我喜欢这个解决方案,如果我可以访问 JSON.parse() 那就完美了,但是,就目前而言,我没有。为清楚起见,请参阅编辑。
    • JSON 应该总是带引号(否则它无效并且在任何有效的 JSON 解码器中都不起作用,包括 javascript JSON 和 python jsonsimplejson)。您能解释一下为什么当您有权创建 javascript 对象时不能使用 javascript 来解析输出吗?
    • @JeffLangemeier 因为您使用的是 highcharts,所以很有可能您也有 jQuery,$.parseJSON() 做类似的工作@api.jquery.com/jQuery.parseJSON
    • @Jugal 不在我这边。我必须处理大量使用 python 管理的后端数据,我很清楚如何设置一个字符串来处理这个问题,但我正在使用外部系统来处理高图,这样我就不无权了解他们的处理方式。 Geckoboard 本质上只需要对象本身,因此我尝试将其格式化为对象,而无需在已使用的 python 之上添加另一种语言(jscript)。
    【解决方案2】:

    只需提供有效的 json 文本。您问题中的示例不是有效的 json。使用Push API

    #!/usr/bin/env python
    import json
    import urllib2
    
    try:
        r = urllib2.urlopen("https://push.geckoboard.com/v1/send/" + widget_key,
                            json.dumps(nested_dict))
    except IOError as e:
        if hasattr(e, 'reason'):
           print "connection error:", e.reason
        elif hasattr(e, 'code'):
           print "http error:", e.code
           print e.read()
        else:
           print "error:", e
    else: # success
        assert json.load(r)["success"]
    

    【讨论】:

    • 这很接近了,我想我只需要骑着他们就可以将 highcharts 添加到他们的推送数据集中。这将是最接近我想要的样子。
    • @JeffLangemeier:同样适用于the polling api:只需提供一个有效的 json。您可以使用flaskbottle 等动态生成 json 以响应 Geckoboard 的 http 请求(或者您可以定期生成静态 json 文件(python + cron)并使用任何网络服务器提供它)。
    • 您先生是学者和圣人。这完美地清除了一切。
    • 杰夫,我遇到了同样的问题,除了这个解决方案似乎对我不起作用。你有机会发布你的代码吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    相关资源
    最近更新 更多