javascript - d3 tsvParser 导致 1 列包含整个字符串,而不是将其解析为对象
问题描述
我正在尝试将 .tsv 文件解析为对象数组,以便可以将数组传递给 react-stockcharts 以显示图表。
这是 react-stockcharts 的一个工作示例:https ://codesandbox.io/s/2ox5z7w310
我在 Python 中使用 pandas 将 .tsv 文件发送到我的客户端,如下所示:
return data.to_csv(sep='\t'), 201, {'Access-Control-Allow-Origin': '*'}
我很好地接收到数据,然后使用 JS 的 .text() 将其转换为字符串:
.then(res => {
res = res.text()
return res
})
我可以打印字符串,它看起来像预期的那样。下面是代表前几行的字符串部分的一个小示例:
"Epoch\tOpen\tHigh\tLow\tClose\tVolume\n2017-08-17 04:00:00+00:00\t4261.48\t4261.48\t4261.48\t4261.48\t1.775183\n2017-08-17 04:01:00+00:00\t4261.48\t4261.48\t4261.48\t4261.48\t0.0\n"
我创建了一个解析器,以使 react-stockcharts 采用正确的格式:
const parseDate = timeParse("%Y-%m-%d %H:%M:%S%Z")
然后当我解析它时,像这样:
str = tsvParse(str, function(d) {
return {
date: parseDate(d.Epoch),
open: d.Open,
high: d.High,
low: d.Low,
close: d.Close,
volume: d.Volume
}
})
return str;
它返回这个,将整个字符串作为 1 列传递到列数组中,而不是将其解析为对象:
[columns: Array(1)]
columns: ["Epoch\tOpen\tHigh\tLow\tClose\tVolume\n2017-08-17 …0:00\t6577.62\t6577.62\t6577.62\t6577.62\t0.002\n"]
0: "Epoch\tOpen\tHigh\tLow\tClose\tVolume\n2017-08-17 "
length: 1
我尝试使用 d3 的 tsvParseRows 并返回:
[{…}]
0: {date: null, open: undefined, high: undefined, low: undefined, close: undefined, …}
length: 1
我不知道这意味着什么,但我想我会发布以防万一它有帮助。
为什么将整个字符串发送到列数组而不是正确解析为对象数组?
代码:
在此处查看一个工作示例,该示例演示了我的应用程序在解析 .tsv 文件时应该做什么:https ://codesandbox.io/s/74rn0km99q
这是我的 Flask app.py 提供我的 .tsv 文件:
from flask import Flask
from flask_restful import Api, Resource
from flask_restful import reqparse
import pymarketstore as pymkts
import talib
import pandas as pd
app = Flask(__name__);
api = Api(app)
parser = reqparse.RequestParser()
parser.add_argument('exchange_symbol', type=str, default='binance-BTCUSDT', help='Provide exchange_symbol')
parser.add_argument('interval', type=str, default='1Min', help='Provide interval')
class RSI(Resource):
def get(self):
args = parser.parse_args()
# exchange_symbol = 'binance-BTCUSDT'
# args['interval'] = '1Min'
datatype = 'OHLCV'
param = pymkts.Params(args['exchange_symbol'], args['interval'], datatype)
cli = pymkts.Client('_private_data_source_web_address_goes_here')
reply = cli.query(param)
data = reply.first().df()
return data.to_csv(sep='\t'), 201, {'Access-Control-Allow-Origin': '*'}
api.add_resource(RSI, '/')
if __name__ == '__main__':
app.run(debug=True)
解决方案:
在传递给 tsvParse 之前需要 .json(),如下所示:
破碎的:
.then(res => {
res = res.text()
return res
})
固定的:
.then(res => {
res = res.json()
return res
})
解决方案
推荐阅读
- arrays - 我想通过 pymongo 的字段对数组中的项目进行排序
- python - 通过具有重复索引的索引合并(或连接)两个数据帧
- typescript - 自动继承箭头函数参数类型
- javascript - Nodemon 没有重新执行我在本地进行的更改
- java - for循环减少循环中的变量
- chirp - 接收回调没有被触发例如 example.py
- java - 将多级括号之间的字符串解析为节点
- android - 在 xamarin 表单中使用 Confluent kafka
- javascript - Google 驱动器和 Firebase Google 身份验证信息 ionic
- python - 在一列上乘以 f.sum