質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

16296閲覧

ObjectMapper(jacksonライブラリ(java))を初期化しようとすると、ClassNotFoundExceptionで落ちる。

hirdd

総合スコア50

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/02/03 08:14

IDE(Eclipseなど)を使用せずに、jacksonライブラリを使用して、jsonのファイルをパースしようと試みている者です。
以下のようなソースコードを作成し、コンパイルも通りましたが、実行してみると、ObjectMapperを初期化するところで、ClassNotFoundが出て落ちてしまいます。どなたか、原因がわかる方、ご教授いただけないでしょうか??

■実行環境
MacOS

$ java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
$

■コンパイルコマンド
$ javac ./Main.java -cp jackson-databind-2.3.5.jar:jackson-core-2.3.5.jar

■実行ディレクトリ
$ ls -l
total 2224
-rw-r--r-- 1 uratah staff 1816 2 3 16:52 Main.class
-rw-r--r-- 1 uratah staff 1667 2 3 17:08 Main.java
-rw-r--r--@ 1 uratah staff 199671 2 2 17:07 jackson-core-2.3.5.jar
-rw-r--r--@ 1 uratah staff 915717 2 2 13:45 jackson-databind-2.3.5.jar
-rw-r--r-- 1 uratah staff 348 2 2 11:28 test.json
-rw-r--r-- 1 uratah staff 4741 2 2 20:01 test.txt
$

■実行結果
$ java Main test.json
Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
at Main.main(Main.java:38)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
$

■javaソース

java

1import java.io.File; 2 2 import java.io.FileReader; 3 3 import java.io.BufferedReader; 4 4 import java.io.FileNotFoundException; 5 5 import java.io.IOException; 6 6 import com.fasterxml.jackson.databind.JsonNode; 7 7 import com.fasterxml.jackson.databind.ObjectMapper; 8 8 import java.util.Iterator; 9 9 10 10 public class Main { 11 11 12 12 public static void main(String[] args) { 13 13 14 14 // ファイルを引数で受け取る 15 15 String fileName = args[0]; 16 20 17 21 try { 18 22 19 23 // ファイルを読み込む 20 24 File file = new File(fileName); 21 36 22 37 // ここからjacksonのdatabindを使用してパースする。 23 38 ObjectMapper mapper = new ObjectMapper(); 24 39 25 40 // rootNodeを取得 26 41 JsonNode rootNode = mapper.readValue(file, JsonNode.class); 27 42 28 43 // 29 44 JsonNode current = rootNode.get(1); 30 45 31 46 JsonNode nameNode = current.get("name"); 32 47 // rootノーどで何が取れるか確認して見る。 33 48 Iterator<String> fieldStrings = current.fieldNames(); 34 49 35 50 while (fieldStrings.hasNext()) { 36 51 String fieldString = fieldStrings.next(); 37 52 System.out.println(fieldString); 38 53 } 39 54 40 55 }catch(FileNotFoundException e) { 41 56 42 57 System.out.println("ファイルがないです。"); 43}catch(IOException e) { 44 59 45 60 System.out.println("IOExceptionが出たよ。"); 46 61 } 47 62 48 63 System.out.println(strBuf); 49 64 } 50 67 } 51

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

実行する際もクラスパスが必要です!!

投稿2017/02/03 08:18

abs123

総合スコア1280

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hirdd

2017/02/03 08:34

ご回答ありがとうございます。以下のような感じで発行してみましたが、結果は同じになってしまいました。 $ java -classpath ./jackson-databind-2.3.5.jar:./jackson-core-2.3.5.jar:. Main test.json Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonAutoDetect at com.fasterxml.jackson.databind.introspect.VisibilityChecker$Std.<clinit>(VisibilityChecker.java:172) at com.fasterxml.jackson.databind.ObjectMapper.<clinit>(ObjectMapper.java:196) at Main.main(Main.java:38) Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.annotation.JsonAutoDetect at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 3 more 実行の仕方がおかしいでしょうか。
abs123

2017/02/03 08:42

エラーの内容が変わりましたね。ライブラリが足りないようです。 エラーの内容からして、annotationに関係するものが抜けているらしいのですが・・・ 少し調べてみたところ、jackson-annotations-2.3.5.jarというものがあるみたいなので、 それも追加してみてください。
hirdd

2017/02/03 10:52

追加したら、バッチリ動きました!!ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問