質問

とても簡単なはずですが、1時間の#embarrasingを試した後、私はそれを見つけることができません。

たとえば、JSON文字列を取得する必要があります {"k1":v1,"k2":v2}, 、aとして解析されます JsonNode.

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

役に立ちましたか?

解決

リチャーズの答えのわずかなバリエーションですが 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);

リチャードの答えは正しいです。または、aを作成することもできます MappingJsonFactory (の org.codehaus.jackson.map)どこで見つけるべきかを知っています ObjectMapper. 。あなたが得たエラーは、通常のものだからです JsonFactory (から core パッケージ)には依存関係がありません ObjectMapper (これはにあります mapper パッケージ)。

ただし、通常は使用します ObjectMapper 心配しないでください JsonParser または他の低レベルのコンポーネント - ストリームの部分をデータバインドしたい場合、または低レベルの取り扱いを行う場合に必要になります。

import com.github.fge.jackson.JsonLoader;
JsonLoader.fromString("{\"k1\":\"v1\"}")
== JsonNode = {"k1":"v1"}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top