Je suis en train d'analyser les éléments suivants JSON en classe livre:JsonPath: Parsing JSON dans un objet Java avec Liste des membres
{
"inventory": {
"book": {
"title": "Database Systems",
"authors": [
{"name": "Sudarshan"},
{"name": "Korth"},
{"name": "Silberschatz"}
]
}
}
}
classe du livre qui a annotations JSON pour les champs et a la définition suivante:
package com.example.books
public class Book {
@JsonProperty("title")
private String title;
@JsonProperty("authors")
private List<Author> authors;
public Book() {
authors = new ArrayList<Author>();
}
// constructors, getters, setters
}
public class Author {
@JsonProperty
private String name;
// constructor, getters, setters...
}
Je suis en train de réaliser cela en utilisant com.jayway.jsonpath.JsonPath
:
Book book = JsonPath.read(inventoryJson.toString(), "$.inventory.book");
Il en résulte l'exception suivante:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.example.books.Book
J'ai aussi essayé:
Book book = JsonPath.parse(inventoryJson.toString()).read("$.inventory.book", Book.class);
Celui-ci donne maintenant une autre exception:
java.lang.RuntimeException: Can not find Array 'authors' field in class com.example.book.Book
at net.minidev.json.writer.BeansMapper$Bean.startArray(BeansMapper.java:79)
at net.minidev.json.parser.JSONParserBase.readMain(JSONParserBase.java:402)
at net.minidev.json.parser.JSONParserBase.readObject(JSONParserBase.java:542)
at net.minidev.json.parser.JSONParserBase.readFirst(JSONParserBase.java:297)
at net.minidev.json.parser.JSONParserBase.parse(JSONParserBase.java:154)
at net.minidev.json.parser.JSONParserString.parse(JSONParserString.java:58)
at net.minidev.json.parser.JSONParser.parse(JSONParser.java:263)
at net.minidev.json.JSONValue.parse(JSONValue.java:206)
at com.jayway.jsonpath.spi.mapper.JsonSmartMappingProvider.map(JsonSmartMappingProvider.java:82)
at com.jayway.jsonpath.internal.JsonContext.convert(JsonContext.java:192)
at com.jayway.jsonpath.internal.JsonContext.read(JsonContext.java:158)
Comment puis-je faire fonctionner?
cours Original:
http://pastebin.com/SAhipfxL
http://pastebin.com/vWfWsaqN
http://pastebin.com/7tqhJfw3
trace complète de la pile: http://pastebin.com/QWV89Hgj
Désolé pour les erreurs. Je viens de créer ces classes factices pour imiter les classes d'origine et souligner les exceptions reçues. J'ai édité la question avec des corrections et ça ne marche toujours pas. – user87407
1) Vous n'avez pas corrigé 'JSON'. 2) Ce n'est pas clair, avez-vous déclaré des classes comme des classes supérieures ou non? 3) Ca ** devrait ** fonctionner - J'ai testé avec mes correctifs. – Andremoniy
Ajout de liens pastebin pour le code, avec l'exception complète stacktrace. Il a toujours des "livres" comme clé (j'ai oublié de changer cela). – user87407