それはとても単純なはずですが、私は1時間試みた後でそれを見つけることができません#embarrasing。
JSON文字列を取得する必要があります。たとえば、JsonNode
として解析される{"k1":v1,"k2":v2}
です。
JsonFactory factory = new JsonFactory();
JsonParser jp = factory.createJsonParser("{\"k1\":\"v1\"}");
JsonNode actualObj = jp.readValueAsTree();
与える
Java.lang.IllegalStateException: No ObjectCodec defined for the parser, can not deserialize JSON into JsonNode tree
Richardsの回答には多少のバリエーションがありますが、readTree
は文字列を取ることができるので、以下のように単純化できます。
ObjectMapper mapper = new ObjectMapper();
JsonNode actualObj = mapper.readTree("{\"k1\":\"v1\"}");
ObjectMapper
を使う必要があります。
ObjectMapper mapper = new ObjectMapper();
JsonFactory factory = mapper.getJsonFactory(); // since 2.1 use mapper.getFactory() instead
JsonParser jp = factory.createJsonParser("{\"k1\":\"v1\"}");
JsonNode actualObj = mapper.readTree(jp);
パーサーの作成に関するさらなる文書は ここ にあります。
第3の変種
ObjectMapper mapper = new ObjectMapper();
JsonNode actualObj = mapper.readValue("{\"k1\":\"v1\"}", JsonNode.class);
リチャードの答えは正しいです。あるいは、MappingJsonFactory
を見つける場所を知っているObjectMapper
(org.codehaus.jackson.map
内)を作成することもできます。 (JsonFactory
パッケージからの)通常のcore
は(ObjectMapper
パッケージ内にある)mapper
に依存していないために発生したエラーです。
しかし、通常はObjectMapper
を使用するだけで、JsonParser
や他の低レベルのコンポーネントについて心配する必要はありません。ストリームの一部をデータバインドする場合、または低レベルの処理を行う場合にのみ必要です。
import com.github.fge.jackson.JsonLoader;
JsonLoader.fromString("{\"k1\":\"v1\"}")
== JsonNode = {"k1":"v1"}