おはようございます。 リスト(<)にあるオブジェクトのプロパティとプロパティ名を別のオブジェクト(プロパティとして)から返すと、 。jackson json list-of-listの特定のプロパティ値をシリアライズ
私は次のクラスがあります。
public class Base {
protected String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
public class A extends Base {
private double[] value;
public A() { type = "A"; }
public A(double[] value) {
this();
setValue(value);
}
public double[] getValue() {
return value;
}
public void setValue(double[] value) {
this.value = value;
}
}
public class B extends Base {
private List<A> value = new ArrayList<A>();
public B() { type = "B"; }
public B(List<A> value) {
this();
setValue(value);
}
public List<A> getValue() { return value; }
public void setValue(List<A> value) {
this.value = value;
}
}
public class C extends Base {
private List<B> value = new ArrayList<B>();
public C() { type = "C"; }
public List<B> getValue() {
return value;
}
public void setValue(List<B> value) {
this.value = value;
}
}
などにそれらを使用する:
私が得るA a = new A();
a.setValue(new double[]{1,2});
B b = new B();
List<A> aList = new ArrayList<A>();
aList.add(new A(new double[]{1,2}));
aList.add(new A(new double[]{3,4}));
b.setValue(aList);
C c = new C();
List<B> bList = new ArrayList<B>();
List<A> aList1 = new ArrayList<A>();
List<A> aList2 = new ArrayList<A>();
aList1.add(new A(new double[]{1,2}));
aList1.add(new A(new double[]{3,4}));
aList2.add(new A(new double[]{5,6}));
bList.add(new B(aList1));
bList.add(new B(aList2));
c.setValue(bList);
ObjectMapper jsonMapper = new ObjectMapper();
jsonMapper.enable(SerializationFeature.INDENT_OUTPUT);
try {
System.out.println("=== com.example.A ===");
System.out.println(jsonMapper.writeValueAsString(a));
System.out.println("=== com.example.B ===");
System.out.println(jsonMapper.writeValueAsString(b));
System.out.println("=== com.example.C ===");
System.out.println(jsonMapper.writeValueAsString(c));
} catch (JsonProcessingException e) {
e.printStackTrace();
}
:
=== com.example.A ===
{
"type" : "A",
"value" : [ 1.0, 2.0 ]
}
=== com.example.B ===
{
"type" : "B",
"value" : [ {
"type" : "A",
"value" : [ 1.0, 2.0 ]
}, {
"type" : "A",
"value" : [ 3.0, 4.0 ]
} ]
}
=== com.example.C ===
{
"type" : "C",
"value" : [ {
"type" : "B",
"value" : [ {
"type" : "A",
"value" : [ 1.0, 2.0 ]
}, {
"type" : "A",
"value" : [ 3.0, 4.0 ]
} ]
}, {
"type" : "B",
"value" : [ {
"type" : "A",
"value" : [ 5.0, 6.0 ]
} ]
} ]
}
をしかし、私はそれが好きにしたい:
=== com.example.A ===
{
"type" : "A",
"value" : [ 1.0, 2.0 ]
}
=== com.example.B ===
{
"type" : "B",
"value" : [ [ 1.0, 2.0 ], [ 3.0, 4.0 ] ]
}
=== com.example.C ===
{
"type" : "C",
"value" : [ [ [ 1.0, 2.0 ], [ 3.0, 4.0 ] ], [ [ 5.0, 6.0 ] ] ]
}
私はCからBのBとプロパティ「タイプ」から返されたときに使用してAのプロパティ「タイプ」を削除することができた:
@JsonIgnoreProperties({ "type" })
public List<A> getValue() {
return value;
}
...
@JsonIgnoreProperties({ "type" })
public List<B> getValue() {
return value;
}
をしかし、私はまだプロパティ「値」の名前を取得しています中括弧...
=== com.example.A ===
{
"type" : "A",
"value" : [ 1.0, 2.0 ]
}
=== com.example.B ===
{
"type" : "B",
"value" : [ {
"value" : [ 1.0, 2.0 ]
}, {
"value" : [ 3.0, 4.0 ]
} ]
}
=== com.example.C ===
{
"type" : "C",
"value" : [ {
"value" : [ {
"value" : [ 1.0, 2.0 ]
}, {
"value" : [ 3.0, 4.0 ]
} ]
}, {
"value" : [ {
"value" : [ 5.0, 6.0 ]
} ]
} ]
}
目的の出力を得るために使用できる注釈は何ですか?それとも、クラスを再設計しなければならないのですか?
こんにちは、ありがとう、有望ですが、BとCの値は文字列になります( ""で囲みます) { "type": "B"、 "value": "[[3.0,4.0]、[5.0 6.0]」 } { "タイプ": "C"、 "値": "[[[7.0、8.0]、[9.0、10.0]、[11.0、12.0]]]" } –
こんにちは、ありがとう。これは仕事です。 –