2013-10-17 13 views
6

Apache Tikaを使用してコンテンツからファイルの種類を特定すると、 XMLファイルは正常ですがjsonはありません。コンテンツタイプがjsonの場合、 "application/json"ではなく "text/plain"が返されます。Apache Tikaと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(); 
     } 
    } 
} 

答えて

5

JSONは、プレーンテキストに基づいています。

あなたの問題は、ファイル名を指定しなかったことです。そのため、Tikaはそのファイルを扱うことができませんでした。

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(); 
あなたが持っていた場合は、ティカはあなたが不足している行がある bytes=plain text + filename=json => jsonを言ったし、あなたが

を期待答えを与えていたかもしれません

それでは、あなたが期待していたとおりにJSONの答えを返すよ

+0

ファイルを扱っていない場合、またはファイル拡張子をヒントとして信頼できない場合は、誰でも提案がありますか? – milletron

+0

@milletron Apache Tikaにファイルの内容を渡すと、マミックマジックベースの検出も行われます – Gagravarr

+0

Thanks @Gagravarr。はい、私は私がプッシュスルーするダースまたは別のバイトストリームで全体的にMIME検出を動作させることができますが、まだJsonとプレーンテキストを別々に区別しません(少なくとも1.15)。私はXMLとHTMLに似た新しいDetectorを書く必要があると思いますか?私はJSONが既に含まれていないことに驚いています。 – milletron

0

ファイルを扱っていない人には、私はジャクソン経由でペイロードを実行するのが最も簡単だと分かったそれが解析できるかどうかを確認してください。ジャクソンがそれを解析できるなら、あなたは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; 
} 
関連する問題