首页 > 解决方案 > 如何在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)如何识别字符串的长度为了使循环正常工作,直到字符串完全循环?

非常感谢!

标签: javascriptjsongoogle-apps-scriptgoogle-sheets

解决方案


  • 您想检索 的值symbolstock_price属性,output并希望将它们分别放入活动电子表格的“A”和“B”列。
  • 您想放置第 3 行中的值。
  • 您想使用 Google Apps 脚本实现此目的。

如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。

修改点:

  • 的属性output有一个数组。并且在数组中 symbolstock_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 行。

笔记:

  • 在您的情况下, ifdata实际上是{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]});。请注意这一点。

参考:

如果我误解了您的问题并且这不是您想要的结果,我深表歉意。


推荐阅读