Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.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 如果数据的格式有点不一致,是否仍然可以确定其文件类型?_Javascript_Json_Node.js_Validation_Csv - Fatal编程技术网

Javascript 如果数据的格式有点不一致,是否仍然可以确定其文件类型?

Javascript 如果数据的格式有点不一致,是否仍然可以确定其文件类型?,javascript,json,node.js,validation,csv,Javascript,Json,Node.js,Validation,Csv,我有一个随机的文本数据,我需要确定它的文件类型,比如.xls、.csv、.tsv、.json和.html。目前,我正在使用蛮力来解析所有不同格式的文件 我的问题发生在文件稍微损坏时,并且在解析过程中将失败。在这些情况下,是否有一个合理的好的启发式方法可以猜测文件类型,以便我可以根据这种格式进一步“lint”数据 我正在使用node.js,以防已经有了一个用于此的库。我对node.js之外的解决方案持开放态度 我尝试使用mmmagic,但它只返回“text/plain”,而不是我需要的信息(.ts

我有一个随机的文本数据,我需要确定它的文件类型,比如.xls、.csv、.tsv、.json和.html。目前,我正在使用蛮力来解析所有不同格式的文件

我的问题发生在文件稍微损坏时,并且在解析过程中将失败。在这些情况下,是否有一个合理的好的启发式方法可以猜测文件类型,以便我可以根据这种格式进一步“lint”数据

我正在使用node.js,以防已经有了一个用于此的库。我对node.js之外的解决方案持开放态度

我尝试使用mmmagic,但它只返回“text/plain”,而不是我需要的信息(.tsv、.json、.xml),livescript中的示例代码:

useMagic = (res)->
    buf = new Buffer res.body
    magic = new mmmagic.Magic! ##return UTF-8 Unicode text, with very long lines, with no line terminators
    #magic = new mmmagic.Magic mmmagic.MAGIC_MIME ## return text/plain; charset=utf-8
    #magic = new mmmagic.Magic mmmagic.MAGIC_MIME_TYPE ##text/plain



    err, magicalres <- magic.detect buf
    magicalres |> console.log 


url = "https://sheethub.com/data.fda.gov.tw/%E4%B8%8D%E7%AC%A6%E5%90%88%E9%A3%9F%E5%93%81%E8%B3%87%E8%A8%8A%E8%B3%87%E6%96%99%E9%9B%86/i/96/%E7%B3%AF%E7%B1%B3?page=1&format=json"
err, res, body <- request {"url": url, "encoding": null}
result = res |> useMagic
我一直在使用多种方法的组合,包括
res.headers['content-type']
,但仍有一些方法失败

您是否厌倦了提供libmagic绑定的模块

它允许检查文件中已知的“魔法”标识符。通常,它只需要访问文件的前几个字节即可执行此操作

我猜这种方法本身可能被认为是“蛮力”,但至少它依赖于一个著名且经过良好测试的库

mmmagic最初建议后的更新未能提供魔法:

如果您总是使用请求模块通过HTTP请求数据,则响应头可能会提供提示:

// returns 'text/json' for your data.fda.gov.tw sample
var mimeType = res.headers['content-type'];

如果不能做到这一点,Perl模块包含的内容可能适合在您自己的代码中重新调整用途。

此库似乎相当轻量级,并且似乎返回了您需要的内容:)谢谢,我刚刚使用mmagic添加了示例代码。它只给我诸如“计划/文本”之类的信息。也许我用错了?我编辑了这个问题,所以我使用了
res.headers['content-type']
,但仍然有一些问题无法解决。谢谢你,我正在检查它是否适用于我的情况。谢谢
// returns 'text/json' for your data.fda.gov.tw sample
var mimeType = res.headers['content-type'];