【问题标题】:call a function using a JSON key and value in Python在 Python 中使用 JSON 键和值调用函数
【发布时间】:2016-07-18 16:35:12
【问题描述】:

我在 Linux 服务器上运行了一个 websocket,以使用本地网络为连接的客户端提供服务。我的目的是让客户端控制一些配置。

一个 Web 应用程序(由 PHP 和 HTML 页面组成)作为一个界面运行, 加载主页时,它使用纯 Javascript var socket = new WebSocket("ws://SERVER_NAME:90/"); 连接到 websocket 一个 HTML 元素 = input['text'] 应该发送一个 JSON 对象,该对象具有如下键和值:

var 数据 = {};
data.key = 输入值;
socket.send(JSON.stringify(data));

更清楚一点:假设key 是 Greeting 而value 是 Hello,所以在 JSON 编码之后,字符串 {"Greeting":"Hello"} 将使用 Web 套接字发送到服务器,服务器将其存储在缓冲区 STDIN,直到 Web 套接字脚本读取它。

Web Socket 的 Python 脚本:

data = json.loads(stdin.readline());
for x in data:
    # the code that run the function Greeting
    pass

一句话:

如何调用函数(Greeting)which is the JSON-KEY 并将参数 Hello 作为输入参数传递 which is JSON-VALUE

我的 Web 套接字正常,我可以从任何客户端接收任何字符串,

注意:我知道我可以做一个 if/else 来检查键是否包含在数组中,然后调用匹配的函数,但它没用,因为我有很多函数和 For ..循环花费了不希望的时间。

抱歉,这个问题很长,但解决这个问题非常必要。 我很感激每一个帮助或建议。

【问题讨论】:

    标签: python websocket


    【解决方案1】:

    通常,您会将函数打包到字典中:

    def greeting(value):
        print "Hello " + str(value)
    
    FUNC_MAP = {
        'Greeting': greeting,
    }
    

    然后调用函数,

    data = json.loads(stdin.readline());
    for func_name, value in data.items():
        FUNC_MAP[func_name](value)
    

    当然,您可以在此处进行一些改进(例如,对不存在的函数进行错误处理等)。

    【讨论】:

    • 非常感谢...这就是我所需要的...但是请有一个小错误(无法将整数值连接到“Hello”)..但一切都正确
    • @AbdulkaderKhateeb -- 我更新了,所以如果你也更新,错误应该会消失。 (例如 'Hello ' + str(value) 而不是 'Hello ' + value )
    • 先生,@mgilson,您能告诉我如何在调用字典中没有的函数时抛出异常...我对 Python 完全陌生,...非常感谢 :)
    • @AbdulkaderKhateeb -- 已经抛出异常 (KeyError)。如果你想handle that exception,那么你需要决定你想让代码做什么。
    • 先生。 @mgilson,请我在代码中改进一些东西,所以我需要你帮助我如何将多个参数传递给函数 Greeting(例如,输出应该是“Hello”+ id +“>>>>”+价值
    猜你喜欢
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多