ジャクソンのJSON文字列をJsonnodeに解析する方法は?
質問
とても簡単なはずですが、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"}
所属していません StackOverflow