如何从javascript和python同时访问相同的JSON文件?

2024-04-25 10:29:59 发布

您现在位置:Python中文网/ 问答频道 /正文

注意:这不适用于web编程。我们使用javascript与底层硬件接口,因此我们不要使用jqueryapi等

我有一个在设备上执行一系列操作的javascript文件,还有一个python文件,稍后将调用它来验证这些操作。javascript文件和python文件中都有一组硬编码的硬件信息。我想通过将这些信息放入一个JSON文件来避免信息的重复,这样双方都可以访问它。你知道吗

// Javascript
var hardware_info = JSON.parse(load('hardware.json'));
// load() is probably not standard javascript API, but it basically copies that code into the existing script.

此步骤已失败,因为“hardware.json”未使用javascript语法。。。你知道吗

我已经使用jshint/jslint验证了json,hardware.json如下所示:

{
    "hardware1": {
        "ID": "xxx"
    },
    "hardware2": {
        "ID": "yyy"
    }
}

下面的Python可以很好地访问json,但没有太多内容:

with open('hardware.json', 'r') as f:
    data = json.load(f)

Tags: 文件web信息idjson编码硬件编程
1条回答
网友
1楼 · 发布于 2024-04-25 10:29:59

它看起来像是load()执行指定的文件,而不是读取它并返回内容。如果这是您读取另一个文件的only选项,那么我建议您使用JSONP而不是JSON。你知道吗

JSONP通过在数据周围添加回调来工作。而不是:

{"key": "value"}

该文件包含一个函数调用,其中传递的数据为:

callback({"key": "value"});

这意味着由JavaScript引擎执行,使其执行回调。load()将执行文件,结果将调用回调函数,传递数据。你知道吗

在web上使用时,您会调用一个JSONP服务并传入该服务应该添加的回调的名称,但是在JS引擎和Python之间共享一个配置文件时,您会硬编码该回调名称。你知道吗

在Python中,在将回调文本作为JSON数据加载之前,必须去掉它。这可能与删除前N个和后M个字符一样简单:

with open('hardware.json', 'r') as f:
    jsonp_data = f.read()
    # remove first 9 and last 3 characters to remove JSONP callback
    data = json.loads(jsonp_data[9:-3])

稍微复杂一点的技术可以使用新词:

callback(
{"key": "value"}
);

更容易删除Python中的第一行和最后一行。或者可以使用jsonp_data.partition('(')[-1].jsonp.rpartition(')')[0]获取字符串中第一个(和最后一个)字符之间的所有内容。等等

相关问题 更多 >