Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript d3 tsvParser生成包含整个字符串的1列,而不是将其解析为对象_Javascript_Pandas_Csv_D3.js - Fatal编程技术网

Javascript d3 tsvParser生成包含整个字符串的1列,而不是将其解析为对象

Javascript d3 tsvParser生成包含整个字符串的1列,而不是将其解析为对象,javascript,pandas,csv,d3.js,Javascript,Pandas,Csv,D3.js,我试图将一个.tsv文件解析为一个对象数组,以便将该数组传递到react stockcharts中以显示图表 以下是react股票图表中的一个工作示例: 我使用Python中的pandas将.tsv文件发送到我的客户端,如下所示: return data.to_csv(sep='\t'), 201, {'Access-Control-Allow-Origin': '*'} 我很好地接收到数据,然后用JS的.text()将其转换为字符串: 我可以打印字符串,它看起来和预期的一样。下面是表示前几行

我试图将一个.tsv文件解析为一个对象数组,以便将该数组传递到react stockcharts中以显示图表

以下是react股票图表中的一个工作示例:

我使用Python中的pandas将.tsv文件发送到我的客户端,如下所示:

return data.to_csv(sep='\t'), 201, {'Access-Control-Allow-Origin': '*'}
我很好地接收到数据,然后用JS的.text()将其转换为字符串:

我可以打印字符串,它看起来和预期的一样。下面是表示前几行的字符串部分的一个小示例:

"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文件时应执行的操作:

这是我的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(),如下所示:

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;
破碎的:

.then(res => {
  res = res.text()
  return res
})
固定的:

.then(res => {
  res = res.json()
  return res
})

你能发布一篇文章来演示这个问题吗(即,发布获取和解析TSV所涉及的整个代码块,以确保没有任何其他因素影响文本解析)。@ialarmedalien是的,我编辑了我的文章,其中包含了你可以直接使用--just do
d3.TSV('data.TSV',function(d))解析TSV的代码{…
您使用的是
d3.tsvParse
——无需进行任何额外的字符串转换。@ialarmedalien在更改为tsv:export function getData(){const promiseCompare=tsv(“)。然后(function(data){data.forEach(function(d))之后,我得到了与以前使用tsvParse时完全相同的答案{d.date=parseDate(d.date);d.open=+d.open;d.high=+d.high;d.low=+d.low;d.close=+d.close;d.volume=+d.volume;})返回数据})返回承诺比较;}如果你在
中做的第一件事是
控制台日志(数据)
,你会得到什么{…}