Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从javascript和python访问相同的JSON文件?_Javascript_Python_Json - Fatal编程技术网

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

如何从javascript和python访问相同的JSON文件?,javascript,python,json,Javascript,Python,Json,注意:这不适用于web编程。我们使用javascript与底层硬件接口,因此我们不要使用jQueryAPI等 我有一个javascript文件,在设备上执行一系列操作,还有一个python文件,稍后将调用该文件来验证这些操作。javascript文件和python文件中都硬编码了一组硬件信息。我希望通过将这些信息放在JSON文件中以避免信息重复,这样双方都可以访问它 // Javascript var hardware_info = JSON.parse(load('hardware.json'

注意:这不适用于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)
它看起来像是
load()
执行指定的文件,而不是读取它并返回内容。如果这是您读取另一个文件的唯一选项,那么我建议您使用JSON而不是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]
获取字符串中第一个
和最后一个
字符之间的所有内容。等等。

您不想像加载JavaScript一样加载JSON文件。您应该将其作为字符串读取并将其交给
JSON.parse()
。(或者使用一个函数来解析文件中的JSON。)那么
load()
从哪里来,文档中说它是做什么的?是否
load()
执行加载的文件而不返回任何内容?如果
load()
执行数据,您可以将数据格式化为JSONP(在Python中加载时,您必须从文件中删除JSONP函数调用)。@MartijnPieters您完全正确,load()执行代码。我只是试着在加载的文件中打印一些东西,它确实打印出来了。你能解释一下JSONP在这种情况下如何帮助我吗?相关文档不多。@return0: