2016-02-25 1 views
1

Si j'ai une réponse JSON qui ressemble à ceci:Java analyse syntaxique des champs de JSON dans la période

{ 
    year: 40, 
    month: 2, 
    day: 21 
} 

qui représente l'âge de quelqu'un. Et j'ai une classe pour stocker que:

public class User { 
    private Period age; 
} 

Comment puis-je analyser les numéros individuels et créer un objet Period?

+0

Personne ne sait ce qui est dans votre classe 'Period', mais je pense que ce que vous cherchez est d'analyser et extraire les valeurs cette représentation JSON. Ai-je raison? –

+0

@ ɐuıɥɔɐɯ désolé, je devrais mentionner que c'est la classe Period standard de la bibliothèque de temps de Java 8. Et oui, fondamentalement, je dois prendre chaque numéro et faire quelque chose comme 'Period.of (année, mois, jour)' – Richard

+0

Cela pourrait aider: http://stackoverflow.com/questions/2591098/how-to-parse-json -in-java – Ceelos

Répondre

2

Si vous utilisez Jackson vous pouvez écrire un JsonDeserializer simple comme ceci:

class UserJsonDeserializer extends JsonDeserializer<User> 
{ 
    public User deserialize(JsonParser p, DeserializationContext ctxt) 
             throws IOException, JsonProcessingException 
    { 
    JsonNode node = p.getCodec().readTree(p); 
    int year = node.get("year").asInt(); 
    int month = node.get("month").asInt(); 
    int day = node.get("day").asInt(); 
    Period period = Period.of(year, month, day); 
    return new User(period); // User needs corresponding constructor of course 
    } 
} 
2

Vous devriez mettre en œuvre un désérialiseur client. Voir the Awita's answer.

Cependant, juste pour l'enregistrement, il y a an official datatype Jackson module qui reconnaît Java 8 Date & Types de données API temps. Il représente Period en tant que chaîne au format ISO-8601, et non en tant qu'objet. Mais si vous êtes prêt à changer le format, vous pouvez envisager d'utiliser ce module.

Voici un exemple:

public class JacksonPeriod { 
    public static void main(String[] args) throws JsonProcessingException { 
     final ObjectMapper objectMapper = new ObjectMapper(); 
     objectMapper.registerModule(new JavaTimeModule()); 
     final Period period = Period.of(1, 2, 3); 
     final String json = objectMapper.writeValueAsString(period); 
     System.out.println(json); 
    } 
} 

Sortie:

"P1Y2M3D"