2016-04-09 3 views
2

Ich bin vor Problem während JSON Parsen jackson-Core-2.7.3.jar mit Sie können sie von hier http://repo1.maven.org/maven2/com/fasterxml/jackson/core/Kann nicht Instanz von java.util.HashMap aus START_ARRAY deserialisieren Token

Meine JSON-Datei ist

[ 
    { 
     "Name": "System Idle Process", 
     "CreationDate": "20160409121836.675345+330" 
    }, 
    { 
     "Name": "System", 
     "CreationDate": "20160409121836.675345+330" 
    }, 
    { 
     "Name": "smss.exe", 
     "CreationDate": "20160409121836.684966+330" 
    } 
] 

und der Java-Code von dem ich versuche, diese

byte[] mapData = Files.readAllBytes(Paths.get("process.txt")); 
Map<String,String> myMap = new HashMap<String, String>(); 
ObjectMapper objectMapper=new ObjectMapper(); 
myMap = objectMapper.readValue(mapData, HashMap.class); 
System.out.println("Map is: "+myMap); 

Aber bei der Ausführung zu analysieren ist erhalte ich den Fehler

Ich habe versucht, über stackoverflow zu suchen, konnte aber keine passende Lösung für diese Art von JSON finden.

Jede Hilfe wäre willkommen.

Hinweis: Dieses JSON hier erwähnt unterscheidet sich ein JSON ohne Key, für das erste Element hat es Wert direkt und innerhalb dieser Wert hat es key:value Paar. Ich bin nicht sicher, wie ich auf key:value Paar zugreifen, die in einem Wert ist.

+2

Wie erwarten Sie ein JSON-Array zu einem Java 'HashMap' umgewandelt werden? – Savior

+1

Mögliches Duplikat von [Fehler beim Konvertieren der JSON-Zeichenfolge in Java mit Jackson] (http://stackoverflow.com/questions/5018340/error-converting-json-string-to-map-in-java-using-jackson) –

+0

Es ist nicht doppelt, Sie sollten JSON zuerst überprüfen und das Problem richtig lesen. –

Antwort

1

Erstellen Sie eine einfache pojo Class First

class MyClass 
{ 
@JsonProperty 
private String Name; 
@JsonProperty 
private String CreationDate; 
} 

und diesen Code verwenden ...

byte[] mapData = Files.readAllBytes(Paths.get("process.txt")); 

ObjectMapper objectMapper=new ObjectMapper(); 
//add this line 
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);  
List<MyClass> myObjects = mapper.readValue(mapData , new TypeReference<List<MyClass>>(){}); 

oder

byte[] mapData = Files.readAllBytes(Paths.get("process.txt")); 

ObjectMapper objectMapper=new ObjectMapper(); 
//add this line 
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);  

List<MyClass> myObjects = mapper.readValue(mapData , mapper.getTypeFactory().constructCollectionType(List.class, MyClass.class)); 

myObjects Willen enthält die List von 0.123.. Jetzt können Sie auf diese Liste gemäß Ihrer Anforderung zugreifen.

+1

Bitte gehen Sie die JSON-Datei erneut durch. Das Erstellen der Klasse MyClass funktioniert nicht mit diesem JSON. Ich muss wissen, wie schreibe ich, da es ein JSON ohne Namen ist –

+0

was soll ich [email protected] –

+1

Die JSON-Datei ist value-> key: value-Paar Es hat nicht 1st Level-Schlüsselpaar, wenn Sie in es schauen. Also selbst wenn ich die Klasse MyClass bei der Ausführung erstellen, wird der Fehler Unbekanntes Feld "Name" –

3

Es ist offenbar, dass Ihre Datei und ErstellDatum eine Liste der Objekte mit Namen Felder repräsentiert.

So müssen Sie nur Liste anstelle von HashMap ObjectMapper, Code ist unten erwähnt:

List<HashMap> dataAsMap = objectMapper.readValue(mapData, List.class); 
0

Diese Ausnahme wird ausgelöst, weil Sie versuchen, eine Liste in einer Karte deserialisieren.

Die Lösung ist eine TypeReference von List<Map<String, Object>> erstellen:

List<Map<String, Object>> myObjects = 
      mapper.readValue(mapData , new TypeReference<List<Map<String, Object>>>(){}); 
Verwandte Themen