6

当我使用 Apache Tika 从内容中确定文件类型时。XML文件很好,但不是json。如果内容类型是 json,它将返回“text/plain”而不是“application/json”。

有什么帮助吗?

public static String tiKaDetectMimeType(final File file) throws IOException {
    TikaInputStream tikaIS = null;
    try {
        tikaIS = TikaInputStream.get(file);
        final Metadata metadata = new Metadata();
        return DETECTOR.detect(tikaIS, metadata).toString();
    } finally {
        if (tikaIS != null) {
            tikaIS.close();
        }
    }
}
4

2 回答 2

7

JSON 是基于纯文本的,因此 Tika 在仅给出要使用的字节时将其报告为这样也就不足为奇了。

你的问题是你没有提供文件名,所以 Tika 没有它可以使用。如果你有,Tika 可以说bytes=plain text + filename=json => json并给你你期望的答案

您缺少的行是:

metadata.set(Metadata.RESOURCE_NAME_KEY, filename);

所以固定的代码片段将是:

tikaIS = TikaInputStream.get(file);
final Metadata metadata = new Metadata();
metadata.set(Metadata.RESOURCE_NAME_KEY, file.getName());
return DETECTOR.detect(tikaIS, metadata).toString();

有了这个,你会得到你所期望的 JSON 的答案

于 2013-10-17T09:44:52.230 回答
0

对于那些不处理文件的人,我发现最简单的方法是通过 Jackson 运行有效负载以查看它是否可以被解析。如果杰克逊可以解析它,你就知道 1)你正在使用 JSON 并且 2)JSON 是有效的。

private static final ObjectMapper MAPPER = new ObjectMapper();
public static boolean isValidJSON(final String json) {
    boolean valid = true;
    try {
        MAPPER.readTree(json);
    } catch (IOException e) {
        valid = false;
    }
    return valid;
}
于 2018-02-06T20:57:38.120 回答