解析从python到Javascript的JSON字符串

Parsing JSON string from python to Javascript

本文关键字:JSON 字符串 Javascript python      更新时间:2023-09-26

我正在做一个玻璃容器控制器项目,目前我想获取照明的时间段。在python中,我有一个名为getStatus()的函数,它将向Javascript返回一个JSON字符串,这将进一步处理数据。但它不起作用。

这是我的python代码:

def getStatus ():
    data=[["HOUR_ON", HOUR_ON],["MINUTE_ON", MINUTE_ON], ["HOUR_OFF", HOUR_OFF], ["MINUTE_OFF", MINUTE_OFF]]
    return json.dumps(data)

在Javascript上

var alertFunction = function macroCallback(macro, args, light) {
    alert(macro + " returned with " + light);
    var obj = JSON.parse(light);
    document.getElementById("testSection").innerHTML="Light turns on at: "+ obj[0].HOUR_ON+":"+obj[0].MINUTE_ON + "'n"+"Light goes out at: "+obj[1].HOUR_OFF+":"+obj[1].MINUTE_OFF;
    alert("after parsing: "+obj[0]);
    document.getElementById("testSection").innerHTML=light;
}

该字符串似乎是从服务器发回的,并且将被正确解析,仅访问该字符串不起作用,我在 innerHTML 部分中未定义四次。

希望有人能帮帮我!

问候和感谢!

马可

在不更改 Python 代码的情况下,更改 JavaScript 代码以使用索引而不是属性访问数组的元素:

var alertFunction = function macroCallback(macro, args, light) {
    alert(macro + " returned with " + light);
    var obj = JSON.parse(light);
    document.getElementById("testSection").innerHTML="Light turns on at: "+ obj[0][1]+":"+obj[1][1] + "'n"+"Light goes out at: "+obj[2][1]+":"+obj[3][1];
    alert("after parsing: "+obj[0]);
    document.getElementById("testSection").innerHTML=light;
}

但是,最好遵循jcubic的建议,将Python代码更改为使用字典:

def getStatus ():
    data={"HOUR_ON": HOUR_ON,
          "MINUTE_ON": MINUTE_ON,
          "HOUR_OFF": HOUR_OFF,
          "MINUTE_OFF": MINUTE_OFF}
    return json.dumps(data)

例如,这将生成如下所示的 JSON 字符串:

'{"HOUR_OFF": 13, "MINUTE_ON": 30, "MINUTE_OFF": 20, "HOUR_ON": 12}'

还可以更改您的 javascript 以访问对象的属性,这更具可读性:

var alertFunction = function macroCallback(macro, args, light) {
    alert(macro + " returned with " + light);
    var obj = JSON.parse(light);
    document.getElementById("testSection").innerHTML="Light turns on at: "+ obj.HOUR_ON + ":" + obj.MINUTE_ON + "'n" + "Light goes out at: "+obj.HOUR_OFF+":"+obj.MINUTE_OFF;
    alert("after parsing: "+obj[0]);
    document.getElementById("testSection").innerHTML=light;
}

您已经保存了数组而不是对象尝试:

data=[{"HOUR_ON": HOUR_ON},{"MINUTE_ON": MINUTE_ON}, {"HOUR_OFF": HOUR_OFF}, {"MINUTE_OFF": MINUTE_OFF}]

或者最好只有一个对象:

data={"HOUR_ON": HOUR_ON, "MINUTE_ON": MINUTE_ON, "HOUR_OFF": HOUR_OFF, "MINUTE_OFF": MINUTE_OFF}