タグ付けされた質問 「jackson」

ジャクソンは、読み取りと書き込み(解析/生成)やJavaオブジェクトとのデータバインディングなどのタスクを処理するためのJavaライブラリです。Jacksonは主にJSONに使用されますが、Avro、CBOR、CSV、Javaプロパティ、Protobuf、Smile、XML、YAMLなど、他の多くのデータ形式もサポートしています。

5
Jacksonを使用してJSONをArrayList <POJO>に逆シリアル化する
MyPojoJSONから逆シリアル化するJavaクラスがあります。MyPojoDeMixIn逆シリアル化を支援するために、特別なMixInクラスを構成しました。MyPojo唯一持っているintとString、適切なゲッターとセッターと組み合わせて、インスタンス変数を。MyPojoDeMixIn次のようになります。 public abstract class MyPojoDeMixIn { MyPojoDeMixIn( @JsonProperty("JsonName1") int prop1, @JsonProperty("JsonName2") int prop2, @JsonProperty("JsonName3") String prop3) {} } 私のテストクライアントでは次のようにしていますがJsonMappingException、型の不一致に関連しているため、コンパイル時には機能しません。 ObjectMapper m = new ObjectMapper(); m.getDeserializationConfig().addMixInAnnotations(MyPojo.class,MyPojoDeMixIn.class); try { ArrayList&lt;MyPojo&gt; arrayOfPojo = m.readValue(response, MyPojo.class); } catch (Exception e) { System.out.println(e) } だけが含まれる「Response」オブジェクトを作成することでこの問題を軽減できることは承知していますArrayList&lt;MyPojo&gt;が、返したいすべての型に対してこれらのやや役に立たないオブジェクトを作成する必要があります。 また、JacksonInFiveMinutesをオンラインで見ましたが、内容Map&lt;A,B&gt;とそれが私の問題にどのように関連しているかを理解するのにひどい時間がありました。わからない場合は、私はJavaにまったく不慣れで、Obj-Cのバックグラウンドを持っています。彼らは特に言及します: POJOおよび「単純な」タイプへのバインドに加えて、1つの追加のバリアントがあります。それは、ジェネリック(型付き)コンテナーへのバインドのバリアントです。この場合は、いわゆるType Erasure(Javaが下位互換性のある方法でジェネリックを実装するために使用)による特別な処理が必要であり、Collection.class(コンパイルされない)などを使用できません。 したがって、データをマップにバインドする場合は、次のようにする必要があります。 Map&lt;String,User&gt; result = mapper.readValue(src, new TypeReference&lt;Map&lt;String,User&gt;&gt;() …
97 java  json  mapping  jackson 

4
Jacksonを使用してJSON文字列を配列に解析する方法
私はString次の値を持つ: [ { "key1": "value11", "key2": "value12" }, { "key1": "value21", "key2": "value22" } ] そして次のクラス: public class SomeClass { private String key1; private String key2; /* ... getters and setters omitted ...*/ } そして、それをa List&lt;SomeClass&gt;またはa に解析したいSomeClass[] ジャクソン を使用してそれを行う最も簡単な方法はどれObjectMapperですか?
96 java  json  jackson 

10
ジャクソンは「is」を削除してプリミティブブールフィールドの名前を変更します
これは重複している可能性があります。しかし、問題の解決策が見つかりません。 クラスがあります public class MyResponse implements Serializable { private boolean isSuccess; public boolean isSuccess() { return isSuccess; } public void setSuccess(boolean isSuccess) { this.isSuccess = isSuccess; } } ゲッターとセッターはEclipseによって生成されます。 別のクラスでは、値をtrueに設定し、JSON文字列として記述します。 System.out.println(new ObjectMapper().writeValueAsString(myResponse)); JSONでは、キーはとして表示され{"success": true}ます。 キーisSuccess自体が欲しいです。ジャクソンはシリアル化中にセッターメソッドを使用していますか?キーをフィールド名自体にする方法は?
96 java  json  jackson 

14
ジャクソンとロンボクを一緒に働かせることはできません
私はジャクソンとロンボクを組み合わせる実験をしています。それらは私のクラスです: package testelombok; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Value; import lombok.experimental.Wither; @Value @Wither @AllArgsConstructor(onConstructor=@__(@JsonCreator)) public class TestFoo { @JsonProperty("xoom") private String x; private int z; } package testelombok; import com.fasterxml.jackson.databind.ObjectMapper; import com.xebia.jacksonlombok.JacksonLombokAnnotationIntrospector; import java.io.IOException; public class TestLombok { public static void main(String[] args) throws IOException { TestFoo tf …

20
java.lang.IllegalArgumentException:タイプの戻り値のコンバーターが見つかりません
このコードで @RequestMapping(value = "/bar/foo", method = RequestMethod.GET) public ResponseEntity&lt;foo&gt; foo() { Foo model; ... return ResponseEntity.ok(model); } } 次の例外が発生します java.lang.IllegalArgumentException: No converter found for return value of type ジャクソンがないため、オブジェクトをJSONに変換できないと思います。私はジャクソンが春のブーツで組み込まれたと思ったので、なぜだかわかりません。 次に、ジャクソンをpom.xmlに追加しようとしましたが、それでも同じエラーが発生します &lt;dependency&gt; &lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt; &lt;artifactId&gt;jackson-core&lt;/artifactId&gt; &lt;version&gt;2.4.3&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt; &lt;artifactId&gt;jackson-databind&lt;/artifactId&gt; &lt;version&gt;2.4.3&lt;/version&gt; &lt;/dependency&gt; これを機能させるには、スプリングブーツのプロパティを変更する必要がありますか? ありがとうございました

6
特定のフィールドのジャクソンJSONカスタムシリアル化
Jackson JSONプロセッサを使用してカスタムフィールドレベルのシリアル化を行う方法はありますか?たとえば、私はクラスを持っていると思います public class Person { public String name; public int age; public int favoriteNumber; } 次のJSONにシリアル化: { "name": "Joe", "age": 25, "favoriteNumber": "123" } age = 25は数値としてエンコードされ、favoriteNumber = 123は文字列としてエンコードされることに注意してください。箱から出してすぐに、ジャクソンintは多くの人を集めます。この場合、favoriteNumberを文字列としてエンコードします。

3
ジャクソンのObjectMapperを使用したJSONオブジェクトの順序
ObjectMapperを使用してjava-jsonマッピングを行っています。 ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter(); ow.writeValue(new File( fileName +".json"), jsonObj); これは私のjavaクラスです: public class Relation { private String id; private String source; private String target; private String label; private List&lt;RelAttribute&gt; attributes; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getSource() …
91 java  json  jackson 

12
SpringでのObjectMapperの構成
私の目標は、objectMapper注釈が付けられた要素のみをシリアル化するようにを構成すること@JsonPropertyです。 そうするために、私はオブジェクトマッパーを構成する方法を説明するこの説明に従いました。 ここで説明するように、カスタムオブジェクトマッパーを含めました。 ただし、クラスNumbersOfNewEventsがシリアル化されても、jsonのすべての属性が含まれています。 誰かヒントがありますか?前もって感謝します ジャクソン1.8.0春3.0.5 CustomObjectMapper public class CompanyObjectMapper extends ObjectMapper { public CompanyObjectMapper() { super(); setVisibilityChecker(getSerializationConfig() .getDefaultVisibilityChecker() .withCreatorVisibility(JsonAutoDetect.Visibility.NONE) .withFieldVisibility(JsonAutoDetect.Visibility.NONE) .withGetterVisibility(JsonAutoDetect.Visibility.NONE) .withIsGetterVisibility(JsonAutoDetect.Visibility.NONE) .withSetterVisibility(JsonAutoDetect.Visibility.DEFAULT)); } } サーブレット.xml &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"&gt; &lt;context:component-scan base-package="de.Company.backend.web" /&gt; &lt;mvc:annotation-driven /&gt; &lt;bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"&gt; &lt;property name="messageConverters"&gt; …

7
Jacksonを使用した列挙型のシリアル化
以下に列挙されたEnumがあります。 public enum OrderType { UNKNOWN(0, "Undefined"), TYPEA(1, "Type A"), TYPEB(2, "Type B"), TYPEC(3, "Type C"); private Integer id; private String name; private WorkOrderType(Integer id, String name) { this.id = id; this.name = name; } //Setters, getters.... } コントローラー(new OrderType[] {UNKNOWN,TYPEA,TYPEB,TYPEC};)で列挙配列を返し、Springはそれを次のjson文字列にシリアル化します。 ["UNKNOWN", "TYPEA", "TYPEB", "TYPEC"] JacksonにPOJOと同じように列挙型のシリアル化を強制する最善の方法は何ですか?例えば: [ {"id": 1, "name": …

6
Jacksonアノテーションを使用してネストされた値をプロパティにマップするにはどうすればよいですか?
製品に対して次のJSONで応答するAPIを呼び出しているとしましょう。 { "id": 123, "name": "The Best Product", "brand": { "id": 234, "name": "ACME Products" } } Jacksonアノテーションを使用して、製品IDと名前を適切にマッピングできます。 public class ProductTest { private int productId; private String productName, brandName; @JsonProperty("id") public int getProductId() { return productId; } public void setProductId(int productId) { this.productId = productId; } @JsonProperty("name") public String getProductName() …
90 java  json  jackson 

6
ジャクソン+ビルダーパターン?
Jacksonに次のコンストラクターを使用してクラスを逆シリアル化してもらいたいです。 public Clinic(String name, Address address) 最初の引数の逆シリアル化は簡単です。問題は、アドレスが次のように定義されていることです。 public class Address { private Address(Map&lt;LocationType, String&gt; components) ... public static class Builder { public Builder setCity(String value); public Builder setCountry(String value); public Address create(); } } 次のように構成されています。 new Address.Builder().setCity("foo").setCountry("bar").create(); 自分でアドレスを作成するために、ジャクソンからキーと値のペアを取得する方法はありますか?あるいは、JacksonにBuilderクラス自体を使用させる方法はありますか?
89 java  json  jersey  jackson 

7
java.lang.ClassCastException:java.util.LinkedHashMapをcom.testing.models.Accountにキャストできません
以下のエラーが発生します: java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.testing.models.Account 以下のコードで final int expectedId = 1; Test newTest = create(); int expectedResponseCode = Response.SC_OK; ArrayList&lt;Account&gt; account = given().when().expect().statusCode(expectedResponseCode) .get("accounts/" + newTest.id() + "/users") .as(ArrayList.class); assertThat(account.get(0).getId()).isEqualTo(expectedId); できない理由はありますget(0)か?

10
JacksonObjectMapper-オブジェクトプロパティのシリアル化順序を指定します
リクエストが仲介者によって改ざんされていないことを確認できるように、ユーザーがリクエストと一緒に署名された検証トークンを送信する必要があるRESTfulWebサービスを実装しています。私の現在の実装は次のとおりです。 検証トークンは、文字列にシリアル化され、ハッシュおよび暗号化されたVerifDataオブジェクトです。 class VerifData { int prop1; int prop2; } 私のサービスでは、シリアル化するデータをVerifDataのインスタンスに配置し、Jackson ObjectMapperを使用してシリアル化し、検証トークンとともに検証エンジンに渡します。 VerfiData verifData = new VerifData(12345, 67890); ObjectMapper mapper = new ObjectMapper(); String verifCodeGenerated = mapper.writeValueAsString(verifData); ただし、アプリケーションコンテナが起動するたびに、ObjectMapperによって文字列にマップされるプロパティの順序が変わるようです。 例:一度は {"prop1":12345,"prop2":67890} そしてまた別の時は {"prop2":67890,"prop1":12345} したがって、クライアントがVerifDataインスタンスを最初の文字列としてシリアル化した場合、それが正しい場合でも、失敗する可能性は50%です。 これを回避する方法はありますか?ObjectMapperでマップするプロパティの順序を指定できますか(昇順など)?または、この検証手順を最適に実装する他の方法はありますか。クライアントとサーバーの両方の実装は私が開発しました。署名と検証にはJavaSecurityAPIを使用しています。

14
フェッチされていないレイジーオブジェクトでのJacksonシリアル化を回避する
Userオブジェクトを返す単純なコントローラーがあります。このユーザーには、休止状態のプロパティFetchType.LAZYを持つ属性座標があります。 このユーザーを取得しようとすると、ユーザーオブジェクトを取得するために常にすべての座標をロードする必要があります。そうしないと、Jacksonがユーザーをシリアル化しようとすると例外がスローされます。 com.fasterxml.jackson.databind.JsonMappingException:プロキシを初期化できませんでした-セッションがありません これは、ジャクソンがこのフェッチされていないオブジェクトをフェッチしようとしているためです。オブジェクトは次のとおりです。 public class User{ @OneToMany(fetch = FetchType.LAZY, mappedBy = "user") @JsonManagedReference("user-coordinate") private List&lt;Coordinate&gt; coordinates; } public class Coordinate { @ManyToOne @JoinColumn(name = "user_id", nullable = false) @JsonBackReference("user-coordinate") private User user; } そしてコントローラー: @RequestMapping(value = "/user/{username}", method=RequestMethod.GET) public @ResponseBody User getUser(@PathVariable String username) { User user = userService.getUser(username); …

4
JsonCreatorを使用してオーバーロードされたコンストラクターでクラスを逆シリアル化する方法
Jackson1.9.10を使用してこのクラスのインスタンスを逆シリアル化しようとしています。 public class Person { @JsonCreator public Person(@JsonProperty("name") String name, @JsonProperty("age") int age) { // ... person with both name and age } @JsonCreator public Person(@JsonProperty("name") String name) { // ... person with just a name } } これを試してみると、次のようになります 競合するプロパティベースの作成者:すでに... {interface org.codehaus.jackson.annotate.JsonCreator @ org.codehaus.jackson.annotate.JsonCreator()}]、検出されました...、アノテーション:{interfaceorg.codehaus。 jackson.annotate.JsonCreator @ org.codehaus.jackson.annotate.JsonCreator()}] Jacksonを使用してオーバーロードされたコンストラクターでクラスを逆シリアル化する方法はありますか? ありがとう
83 java  json  jackson 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.