Fehler mit Jackson und Json

Ich versuche zu analysieren, einige JSON (vollständiges Beispiel für die JSON kann man in diese Gist). Ich zeige die Allgemeine Struktur der JSON-unten:

[
    {
        "title": "Principles of Compiler Design",
        "authors": [
            "Aho",
            "Ullman"
        ],
        "publisher": "Addison Wesley",
        "year": 1977
    },
    {
        "title": "Compilers: Principles Techniques and Tools",
        "authors": [
            "Aho",
            "Sethi",
            "Ullman"
        ],
        "publisher": "Addison Wesley",
        "year": 1985
    }
]

Ich versuche zu Parsen von JSON mit Jackson Bibliotheken, aber ich bekomme die folgende Fehlermeldung beim testen:

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_ARRAY token
 at [Source: library.json; line: 2, column: 49] (through reference chain: com.acme.datatypes.User["authors"])
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:163)
    at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:588)
    at com.fasterxml.jackson.databind.deser.std.JdkDeserializers$StringDeserializer.deserialize(JdkDeserializers.java:90)
    at com.fasterxml.jackson.databind.deser.std.JdkDeserializers$StringDeserializer.deserialize(JdkDeserializers.java:59)
    at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:336)
    at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:89)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:290)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:112)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2563)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1759)
    at com.acme.datatypes.UserTest.main(UserTest.java:20)

Hier ist mein code:

Benutzer-Test-Klasse:

public class UserTest {
    public static void main(String[] args) throws JsonParseException,
            JsonMappingException, IOException {
        File jsonFile = new File("library.json");

        User user = null;

        ObjectMapper mapper = new ObjectMapper();

        user = mapper.readValue(jsonFile, User.class);
        System.out.println(user.getTitle());

        user = mapper.readValue(jsonFile, User.class);
        System.out.println(user.getAuthors());

        user = mapper.readValue(jsonFile, User.class);
        System.out.println(user.getPublisher());

        user = mapper.readValue(jsonFile, User.class);
        System.out.println(user.getYear());
    }
}

User-Klasse:

public class User {

    private String authors;
    private String publisher;
    private String title;
    private Number year;

    public String getAuthors() {
        return this.authors;
    }

    public void setAuthors(String authors) {
        this.authors = authors;
    }

    public String getPublisher() {
        return this.publisher;
    }

    public void setPublisher(String publisher) {
        this.publisher = publisher;
    }

    public String getTitle() {
        return this.title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Number getYear() {
        return this.year;
    }

    public void setYear(Number year) {
        this.year = year;
    }
}

Weiß jemand was das problem sein könnte? Danke.

  • kannst du die java-code, müssen Sie wandeln diese in eine Liste
  • Wie haben Sie deklarieren Ihre authors Eigenschaft? Es sollte ein collection-oder array-Typ.
  • P Johny , habe ich bearbeitet das Dokument und den code Hinzugefügt, damit Sie sehen,
  • können Sie bitte Blick auf den code werfen und mir sagen, wo, um es zu Bearbeiten?
  • Ihre authors Eigenschaft kann ein string sein, weil in JSON ein array. Ändern Sie Ihren Typ auf List<String>.
  • Wahrnehmung, ich bin immer diese Fehlermeldung jetzt: Kann nicht deserialisiert Instanz von com.acme.- Datentypen.Benutzer aus START_ARRAY token an [Quelle: Bibliothek.json; Zeile: 1, Spalte: 1]
  • um Zeit zu sparen, habe ich geschrieben eine Antwort unten. Werfen Sie einen Blick auf Sie und sehen, ob es dir hilft.
  • im immer diese Fehlermeldung nachdem, was Sie gesagt, zu tun : Exception in thread "main" com.fasterxml.jackson.core.JsonParseException: Unexpected end-of-input-innerhalb/zwischen ARRAY-Einträge [Quelle: Bibliothek.json; Zeile: 11, Spalte: 200]

InformationsquelleAutor tribrick | 2013-03-06
Schreibe einen Kommentar