我正在尝试将python列表传递给javascript函数,但它不起作用...我认为Javascript函数会将其视为一个长字符串。这就是我的工作:
@webiopi.macro
def calcSunriseSunsetOneYear():
o=ephem.Observer()
o.lat='51.21828'
o.long='3.94958'
s=ephem.Sun()
d=datetime.date.today()
t=timedelta(days=1)
d=d+t
o.date=d
riseTime=[]
setTime=[]
s.compute()
for x in range (0,365):
o.date=o.date+1
riseTime.append(str(ephem.localtime(o.next_rising(s))))
setTime.append(str(ephem.localtime(o.next_setting(s))))
return(json.dumps(riseTime))
这是python数据:
["2015-03-22 06:43:02.000006", "2015-03-23 06:40:46", "2015-03-24 06:38:31.000001", "2015-03-25 06:36:15.000002", "2015-03-26 06:33:59.000003", "2015-03-27 06:31:44.000004", "2015-03-28 06:29:28.000005", "2015-03-29 07:27:13.000006", "2015-03-30 07:24:57", "2015-03-31 07:22:42.000001", "2015-04-01 07:20:27.000002", "2015-04-02 07:18:13.000003", "2015-04-03 07:15:58.000004", "2015-04-04 07:13:44.000005", "2015-04-05 07:11:31.000006", "2015-04-06 07:09:17", "2015-04-07 07:07:04.000001", "2015-04-08 07:04:52.000002", "2015-04-09 07:02:40.000003", "2015-04-10 07:00:28.000004"]
在Javascript中我这样做:
var printChart = function macroCallBack(macro, args, chartInfo) {
document.getElementById("chartInfo").innerHTML=chartInfo;
var arLength=chartInfo.length;
console.log("arLength is: ",arLength);
for (var i=0; i<arLength; i++) {
console.log(chartInfo[i]);
}
}
控制台在单独的行上打印python列表的每个字符,如下所示:
[ “ 2 0 1 五 等...
我无法格式化上面的console.log输出,但每个字符都在一个单独的行上。
此外,数组的长度与总字符串的长度完全相同,因此我的结论是将python列表转换为Javascript作为一个长字符串...
我希望有人可以帮助我!
答案 0 :(得分:1)
你是对的,你正在循环一个字符串。这是因为json是字符串。这使得在不同编程语言之间传递数据变得非常容易,因为字符串是几乎在每种编程语言中实现的数据类型。但是,因为它是字符串,所以需要将字符串解码为可用的格式/对象。在javascript中,您可以使用方法JSON.parse()
。
var frompythonjsonstring ='["2015-03-22 06:43:02.000006", "2015-03-23 06:40:46", "2015-03-24 06:38:31.000001", "2015-03-25 06:36:15.000002", "2015-03-26 06:33:59.000003", "2015-03-27 06:31:44.000004", "2015-03-28 06:29:28.000005", "2015-03-29 07:27:13.000006", "2015-03-30 07:24:57", "2015-03-31 07:22:42.000001", "2015-04-01 07:20:27.000002", "2015-04-02 07:18:13.000003", "2015-04-03 07:15:58.000004", "2015-04-04 07:13:44.000005", "2015-04-05 07:11:31.000006", "2015-04-06 07:09:17", "2015-04-07 07:07:04.000001", "2015-04-08 07:04:52.000002", "2015-04-09 07:02:40.000003", "2015-04-10 07:00:28.000004"]';
macroCallBack(frompythonjsonstring);
function macroCallBack (str) {
obj = JSON.parse(str)
for (var i=0; i<obj.length; i++) {
console.log(obj[i]);
}
}
答案 1 :(得分:0)
您应该查看将字符串转换为Javascript对象的JSON.stringify和JSON.parse javascript方法。希望这有帮助