Docomo APIの音声出力は、Jsonファイルとして返される。それをJavaで構文解析をする。使わせていただいたのは、以下のサイトにあるパーサー。
https://www.tutorialspoint.com/json/json_java_example.htm
要領とサンプルを掲載しておく。
(1)サイトから、ソースをダウンロードし、ライブラリ用のjarファイルを作成する。JsonSimple.jar
(2)以下のソースのライブラリに加える。jsonと配列の処理が頭の中でごちゃごちゃになる。(なお、上記サイトのデコードサンプルは、そのままではエラーになる。なんでそんなものを?)
import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import org.json.simple.JSONObject; import org.json.simple.JSONArray; import org.json.simple.parser.ParseException; import org.json.simple.parser.JSONParser; public class JsonParserTest { String readJsonFile() { // 出力結果をファイルから読み込む場合 // 通常は、httpレスポンスをそのまま、次のparseJasonで解析すれば良い String json = ""; try { File file = new File("/path/to/docomo_output.json"); BufferedReader br = new BufferedReader(new FileReader(file)); String str; while ((str = br.readLine()) != null) { json += str; } br.close(); } catch (FileNotFoundException e) { System.out.println(e); } catch (IOException e) { System.out.println(e); } return json; } void parseJson(String json) { JSONParser parser = new JSONParser(); try { JSONObject obj0 = (JSONObject )parser.parse(json); //認識テキストの出力 //出力テキストの全体は、textタグを読み取れば良い System.out.println("出力テキスト"); System.out.println(obj0.get("text")); // 以上で良いのだが、分かち書きされた分析結果も受け取るようにして見る // resultの値は、配列になっているので、まずその配列を受け取る JSONArray results_array = (JSONArray) obj0.get("results"); // 配列の最初の要素を取り出す JSONObject obj1_tokens = (JSONObject )results_array.get(0); // 配列の最初の要素が"tokens"というJsonになっているので、それをうけとる // そのtokensの値が配列になっているので、配列として受け取る JSONArray array1_tokens = (JSONArray) (obj1_tokens.get("tokens")); // tokensの配列をループにして回す for (Object ob : array1_tokens) { JSONObject job = (JSONObject) ob; String written = (String) job.get("written"); System.out.print("書き方:" + written + ","); double confidence = (double) job.get("confidence"); System.out.print("信頼性:" + confidence + ","); String spoken = (String) job.get("spoken"); System.out.println("読み:" + spoken); // 他の要素は省略 } } catch (ParseException pe) { System.out.println("position: " + pe.getPosition()); System.out.println(pe); } } public static void main(String[] args) { JsonParserTest jparser = new JsonParserTest(); jparser.parseJson(jparser.readJsonFile()); } }