La proprietà shipping_profiles
non sembra una matrice. Rappresenta l'oggetto con proprietà dinamiche, quindi dovremmo trattarlo come un oggetto. Se non sappiamo nulla delle proprietà, possiamo usare l'annotazione @JsonAnySetter
. Di seguito è riportato l'algoritmo Algoritmo:
- Deserializzare JSON in classi modello JSON.
- Converti oggetti dinamici (mappe) in classi POJO dell'app utilizzando ObjectMapper
- Utilizza POJO dell'app ogni volta che lo desideri.
Si prega di vedere il mio esempio di implementazione. Spero, ti aiuti a risolvere il tuo problema. JSON ingresso: programma
{
"shipping_profiles":{
"563":{
"name":"name563",
"value":"value563"
},
"564":{
"name":"name564",
"value":"value564"
},
"565":{
"name":"name565",
"value":"value565"
},
"566":{
"name":"name566",
"value":"value566"
}
}
}
Esempio:
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonProgram {
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
File source = new File("X:/test.json");
Entity entity = mapper.readValue(source, Entity.class);
ShippingProfiles shippingProfiles = entity.getShippingProfiles();
List<Map<String, String>> profileMaps = shippingProfiles.getProfiles();
List<Profile> profiles = new ArrayList<Profile>(profileMaps.size());
for (Map<String, String> item : profileMaps) {
profiles.add(mapper.convertValue(item, Profile.class));
}
System.out.println(profiles);
}
}
class Entity {
@JsonProperty("shipping_profiles")
private ShippingProfiles shippingProfiles;
public ShippingProfiles getShippingProfiles() {
return shippingProfiles;
}
public void setShippingProfiles(ShippingProfiles shippingProfiles) {
this.shippingProfiles = shippingProfiles;
}
}
class ShippingProfiles {
private List<Map<String, String>> profiles = new ArrayList<Map<String, String>>();
@JsonAnySetter
public void setDynamicProperty(String name, Map<String, String> map) {
profiles.add(map);
}
public List<Map<String, String>> getProfiles() {
return profiles;
}
public void setProfiles(List<Map<String, String>> profiles) {
this.profiles = profiles;
}
}
class Profile {
private String name;
private String value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public String toString() {
return "Profile [name=" + name + ", value=" + value + "]";
}
}
Sopra stampe app:
[Profile [name=name563, value=value563], Profile [name=name564, value=value564], Profile [name=name565, value=value565], Profile [name=name566, value=value566]]
fonte
2013-07-17 11:16:55
Puoi mostrarci come si presenta la tua classe POJO? –
Sei sicuro di non volere che shipping_profiles sia un array? Per esempio. "shipping_profiles": ["563": {...}, ...]. –
@ Michał Ziober: fino ad ora non ho progettato il POJO. In attesa di aiuto da parte tua per progettare il POJO –