我想在java
中创建一个具有此结构的JSON文件"FieldA" : {
Preis: "100,00 €",
Text_de: "some german",
Text_en: "engl",
Materialnummer: "32400020",
},
"FieldB" : {
Preis: "100,00 €",
Text_de: "foo",
Text_en: "bar",
Materialnummer: "32400020",
}
我正在使用杰克逊为此创建了一个POJO
public class IpadField {
public String fieldname;
public String Text_de;
public String Text_en;
public String Preis;
public String Materialnummer;
public IpadField(){
}
@Override
public String toString() {
return "IpadField{" +
"fieldname='" + fieldname + '\'' +
", Text_de='" + Text_de + '\'' +
", Text_en='" + Text_en + '\'' +
", Preis='" + Preis + '\'' +
", Materialnummer='" + Materialnummer + '\'' +
'}';
}
public IpadField(String fieldname, String text_de, String text_en, String preis, String materialnummer) {
this.fieldname = fieldname;
Text_de = text_de;
Text_en = text_en;
Preis = preis;
Materialnummer = materialnummer;
}
}
使用jackson
创建这些字段的列表时public void createJson() throws Exception {
File outFile = new File("d://test.json");
if (outFile.exists()){
outFile.delete();
}
IpadField fieldaA = new IpadField("fieldA", "test", "test", "test", "test");
IpadField fieldaB = new IpadField("fieldB", "test", "test", "test", "test");
Assert.assertFalse(outFile.exists());
JsonCreator.createForField(outFile, fieldaA );
ArrayList<IpadField> fieldList = new ArrayList<IpadField>();
fieldList.add(fieldaA);
fieldList.add(fieldaB);
JsonCreator.createForList(outFile, fieldList);
Assert.assertTrue(outFile.exists());
这会产生
[
{
"Materialnummer": "test",
"Preis": "test",
"Text_de": "test",
"Text_en": "test",
"fieldname": "fieldA"
},
{
"Materialnummer": "test",
"Preis": "test",
"Text_de": "test",
"Text_en": "test",
"fieldname": "fieldB"
}
]
哪个不是理想的结构,我知道如何调整POJO以使其产生正确的结构? 感谢
答案 0 :(得分:2)
首先,您的要求不是有效的JSON结构。它应该是这样的:
{
"FieldA": {
"Preis": "100,00 €",
"Text_de": "some german",
"Text_en": "engl",
"Materialnummer": "32400020"
},
"FieldB": {
"Preis": "100,00 €",
"Text_de": "foo",
"Text_en": "bar",
"Materialnummer": "32400020"
}
}
如果这是您的要求,请将POJO更改为以下内容:
import com.fasterxml.jackson.annotation.JsonIgnore;
public class IpadField {
@JsonIgnore
public String fieldname;
public String Text_de;
public String Text_en;
public String Preis;
public String Materialnummer;
public IpadField() {
}
@Override
public String toString() {
return "IpadField{" + "fieldname='" + fieldname + '\'' + ", Text_de='" + Text_de + '\'' + ", Text_en='"
+ Text_en + '\'' + ", Preis='" + Preis + '\'' + ", Materialnummer='" + Materialnummer + '\'' + '}';
}
public IpadField(String fieldname, String text_de, String text_en, String preis, String materialnummer) {
this.fieldname = fieldname;
Text_de = text_de;
Text_en = text_en;
Preis = preis;
Materialnummer = materialnummer;
}
}
即在fieldName上添加@JsonIgnore,因为你不希望它在你的结构中。
然后它应该是这样的:
public void createJSON(){
File outFile = new File("d://test.json");
if (outFile.exists()){
outFile.delete();
}
IpadField fieldaA = new IpadField("fieldA", "test", "test", "test", "test");
IpadField fieldaB = new IpadField("fieldB", "test", "test", "test", "test");
Map<String, IpadField> addIpadMap = addIpad(null, fieldaA);
addIpadMap = addIpad(addIpadMap, fieldaB);
ObjectMapper mapper = new ObjectMapper();
ObjectWriter writer = mapper.writer(new DefaultPrettyPrinter());
writer.writeValue(outFile, addIpadMap);
}
public Map<String, IpadField> addIpad(Map<String, IpadField> map, IpadField ipadField) {
if (map == null)
map = new HashMap<String, IpadField>();
map.put(ipadField.fieldname, ipadField);
return map;
}
它会输出类似这样的输出:
{
"fieldA" : {
"Text_de" : "test",
"Text_en" : "test",
"Preis" : "test",
"Materialnummer" : "test"
},
"fieldB" : {
"Text_de" : "test",
"Text_en" : "test",
"Preis" : "test",
"Materialnummer" : "test"
}
}
答案 1 :(得分:1)
您可以尝试将IpadField
个对象添加到地图中,然后对其进行序列化。类似的东西:
IpadField fieldaA = new IpadField("fieldA", "test", "test", "test", "test");
IpadField fieldaB = new IpadField("fieldB", "test", "test", "test", "test");
Assert.assertFalse(outFile.exists());
Map<String,IpadField> fields = new HashMap<String,IpadField>();
fields.put(fieldaA.getFieldName(),fieldaA);
fields.put(fieldaB.getFieldName(),fieldaB);
ObjectMapper mapper = new ObjectMapper();
mapper.writeValueAsString(fields);
另外,请不要忘记将@JsonIgnore
添加到fieldName属性中。
这应该产生所需的json。