javascript - 如何在javascript中循环遍历一个unciode json字符串?
问题描述
我得到了 CBOE 选项 api 返回的以下字符串:
{u'inputs': {u'stock_price_max': 50.0, u'high_low_stock_max': None, u'time_frame': u'middle', u'hv30_max': None, u'high_low_stock_min': None, u'symbols': None, u'hv30_min': None, u'low_strike': 3.0, u'high_strike': 4.0, u'industry_codes': None, u'spread_ask_price_max': None, u'stock_price_min': 10.0}, u'output': [{u'stock_price': 43.2, u'stock_hi_lo_percent': 72.9651, u'symbol': u'EWZ', u'industry_code': 55501010, u'max_gain': 0.52, u'high_strike_otm_percent': 0.463, u'low_strike_otm_percent': 2.7778, u'spread_ask': 0.48, u'spread': u'43/42 Put', u'expiry': u'2019-04-18', u'max_gain_to_spread_ask_percent': 108.3333, u'hv30': 27.3836}, {u'stock_price': 41.37, u'stock_hi_lo_percent': 21.7957, u'symbol': u'FXI', u'industry_code': 55501010, u'max_gain': 0.26, u'high_strike_otm_percent': 0.8944, u'low_strike_otm_percent': 2.103, u'spread_ask': 0.24, u'spread': u'41/40.5 Put', u'expiry': u'2019-05-17', u'max_gain_to_spread_ask_percent': 108.3333, u'hv30': 20.2925}
我想遍历它并将元素放入 Google 电子表格的单元格中。我有这个代码:
function myFunction() {
var response = UrlFetchApp.fetch(endpoint);
var data = response.getContentText();
sheet.getRange("A8").setValue(data);
}
这会将整个字符串放入单元格 A8。
我试图用
for (i = 0; i < jsonlen; i++) {
sheet.getRange("A:A").setValaue(data['output']['symbol']);
}
这将返回“未定义”。所以问题是:1)如何从字符串的“输出”部分提取我需要的元素 2)将符号放入 A3、A4 等,然后将 stock_price 放入 B3、B4 等 3)如何识别字符串的长度为了使循环正常工作,直到字符串完全循环?
非常感谢!
解决方案
- 您想检索 的值
symbol
和stock_price
属性,output
并希望将它们分别放入活动电子表格的“A”和“B”列。 - 您想放置第 3 行中的值。
- 您想使用 Google Apps 脚本实现此目的。
如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。
修改点:
- 的属性
output
有一个数组。并且在数组中symbol
。stock_price
- 因此,首先,需要准备要放入电子表格的值。
修改后的脚本:
function myFunction() {
var response = UrlFetchApp.fetch(endpoint);
var data = JSON.parse(response.getContentText());
var values = data.output.map(function(e) {return [e.symbol, e.stock_price]});
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange(3, 1, values.length, values[0].length).setValues(values);
}
- 在这种情况下,这些值将放在活动工作表上“A”和“B”列的第 3 行。
笔记:
- 在您的情况下, if
data
实际上是{u'inputs': {###}, u'outputs': [###]}
具有 python 2 的 unicode 文字的字符串值,u
需要替换。所以在这种情况下,请放在data = JSON.parse(data.replace(/u\'|\'/g, "\"").replace(/None/g, "null"));
前面var values = data.output.map(function(e) {return [e.symbol, e.stock_price]});
。请注意这一点。
参考:
如果我误解了您的问题并且这不是您想要的结果,我深表歉意。
推荐阅读
- java - 如何重构:外部类 SLList
内部类分配 . 内部类可以移动到自己的 .java 文件吗? - typescript - 如果密钥存在于对象 1 中,如何将值从对象 2 传输到对象 1
- excel - 提取特定域扩展的电子邮件 ID
- spring - 为 put 和 patch Spring data rest 分离验证器
- mongodb - MongoDB聚合管道过滤器基于数组中子对象的属性
- c# - 搜索功能在编译时返回 ArgumentNullException
- javascript - React Redux 更新状态,但没有重新渲染,并且 props 在 render(){} 中未定义
- javascript - 为什么 GitBash 编译总是带有这些警告?
- python - 在 Gekko 的方程中将负值设置为零?
- angular - 分配的变量是未定义的角度打字稿