json - 区分 XBRL、XML、CSV 和 JSON

标签 json xml algorithm csv xbrl

目前我正在尝试区分不同的序列化文本格式。主要介于 XBRL、XML、CSV 和 JSON 之间。

我想假设,通过步骤检查,如果我们使用解析器解析 XBRL/XML 并在没有抛出任何异常的情况下返回,那么它是一个有效的 XML 文档,需要进一步检查文档是否是常规文档xml 或 xbrl。

如果第一次检查失败,请尝试解析 csv。如果解析 csv 返回异常,请尝试解析为 JSON。如果以上方法均无效,则该文档无效。

这会是一种识别文档文本格式类型的特殊方法吗?或者,还有更好的方法? (即读取文档的前几个字节等...)。

谢谢

最佳答案

如果您知道 JSON 将是一个对象或数组,并且内容必须是这四个之一...

if(content.charAt(0) == "[" || content.charAt(0) == "{") { 
    // JSON
} else if(content.charAt(0) == "<") {
    if(content.indexOf("xmlns=\"http://www.xbrl.org/2001/instance\"") >= 0) {
        // XBRL
    } else {
        // XML
    }
} else {
    // CSV ?...
    // first remove strings
    var testCSV = content.replace("\"\"", ""); // remove escaped quotes
    testCSV = testCSV.replace(/".*?"/g, ""); // match-remove quoted strings
    var lines = testCSV.split("\n");
    if(lines.length === 1 && lines[0].split(",").length > 1) {
        // only 1 row so we can only verify if there is two or more columns
        // CSV
    } else if(lines.length > 1 && lines[0].split(",").length > 1 && lines[0].split(",").length === lines[1].split(",").length) {
        // we know there's multiple lines with the same number of columns
        // CSV
    }
    // can't be sure what it is
    // ???
}

以上将为您提供合理的确定性。

编辑我还添加了一个快速 CSV 测试。

关于json - 区分 XBRL、XML、CSV 和 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32452416/

相关文章:

json - 遍历 JSON 键和值并同时替换 golang 中的指定匹配值

algorithm - 非二叉树能否按顺序遍历?

Python 计算加泰罗尼亚数字

使用 scala/play 解析 Json : how to get a trait?

php - 如何使用 json_encode 调用 PHP 中的多个类?

java - 如何只签署 XML 的特定部分

xml - 如何在 Scala 中创建没有文字元素名称的 XML 根节点?

java - 无法正确实现 sleep()

algorithm - 事件选择的动态规划解决方案

ajax - AJAX使Chrome崩溃