2013-04-25 8 views
7

Ich versuche zu lernen, wie Jackson Parser zu verwenden, um effektivere Analyse von JSON-Daten zu erhalten. Ich habe diese JAR-Dateien: Downloaded from this pageJacksonParser-Datenbank und Kernursache "Doppelte Datei für APK gefunden"?

jackson-core-2.2.0.jar 
jackson-annotations-2.2.0.jar 
jackson-databind-2.2.0.jar 

Und in Code, ich versuche nur eine json in ein Objekt Array zu analysieren:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    String json = ReadFromRaw(this, R.raw.json); 
    ArrayList<Category> categories = null; 
    try { 
     ObjectMapper mapper = new ObjectMapper(); 
     categories = mapper.readValue(json, mapper.getTypeFactory().constructCollectionType(List.class, Category.class)); 
     // categories = mapper.readValue(json, new TypeReference<List<Category>>() {}); 
    } catch (Exception e) { 
     Log.e("MainActivity", "Error: " + e.getMessage()); 
    } 

    SimpleListView myList = (SimpleListView) findViewById(R.id.myList); 
    myList.setAdapterWithItems(GetAdapter(categories)); 
} 

Nicht sicher, wenn nötig, aber hier meine Kategorie-Klasse ist als gut:

@JsonIgnoreProperties({ "DisplayPriority" }) 
public class Category { 

    @JsonProperty("Id") 
    private String categoryId; 

    @JsonProperty("name") 
    private String categoryName; 

    public String getCategoryId() { 
     return categoryId; 
    } 

    public void setCategoryId(String categoryId) { 
     this.categoryId = categoryId; 
    } 

    public String getCategoryName() { 
     return categoryName; 
    } 

    public void setCategoryName(String categoryName) { 
     this.categoryName = categoryName; 
    } 

} 

Alles scheint in Ordnung, es gibt keine Fehler oder Warnungen. Aber wenn ich versuche, zu kompilieren, gibt es diesen Fehler:

[2013-04-25 09:32:08 - Training - JacksonParser] Error generating final archive: Found duplicate file for APK: LICENSE 
Origin 1: C:\~\workspace\Training - JacksonParser\libs\jackson-core-2.2.0.jar 
Origin 2: C:\~\workspace\Training - JacksonParser\libs\jackson-databind-2.2.0.jar 

Als ich für diesen Fehler auf Google suchen, heißt es, dass eine Klasse gemeinsam auf diesen JAR-Dateien. Und ich habe keine Ahnung, was ich tun soll ... Gibt es etwas, was ich falsch mache? Oder ich vermisse etwas?

Vielen Dank im Voraus, jede Hilfe wird geschätzt.

Antwort

2

Ich habe das gleiche Problem. Also, ich benutze die alte Version.

jackson-core-asl-1.9.12.jar

jackson-mapper-asl-1.9.12.jar

Sie können von "Neueste stabile Version 1.x" der gleichen Seite herunterladen.

+0

1.9.12: Kern-lgpl, Mapper-lgpl Dieser Gläser arbeiten, danke. – yahya

+0

Ich würde empfehlen, 1.x-Versionen zu verwenden. Aber versuchen Sie stattdessen 2.1.4 - es ist 2.x kompatibel. – StaxMan

+0

Wo finden Sie den Download für die 2.1.x-Versionen? Ich sehe nur 2.2 und 1.x Sachen auf ihrer Seite aufgelistet. –

12

Dieses Problem wurde für Version 2.2.0 gemeldet, siehe this issue; aber sollte in 2.2.1 gelöst werden.

EDIT: stellt sich heraus, dass das Hauptproblem darin besteht, dass diese Dateien unter META-INF/ in jar liegen müssen; wenn ja, gibt es keinen Konflikt. Und das wird 2.2.1 tun, sobald es veröffentlicht wird.

+0

Vielen Dank für Informationen. – yahya

+0

Die Umstellung auf 2.2.1 hat dieses Problem für mich gelöst – Pheepster

3

Eine Art von Schmerz, aber es ist nicht so schlimm, die Gläser manuell neu zu erstellen.

git clone git://github.com/FasterXML/jackson-core.git 
git clone git://github.com/FasterXML/jackson-databind.git 
cd jackson-core 
git checkout jackson-core-2.2.0b # not sure what the "b" is about 
mv src/main/resources/NOTICE src/main/resources/META-INF/ 
mv src/main/resources/LICENSE src/main/resources/META-INF/ 
mvn install 
# jar will be at target/jackson-core-2.2.0.jar 

cd ../jackson-databind 
git checkout jackson-databind-2.2.0 
mv src/main/resources/NOTICE src/main/resources/META-INF/ 
mv src/main/resources/LICENSE src/main/resources/META-INF/ 
mvn install 
# jar will be at target/jackson-databind-2.2.0.jar 

Le Seufzer. Was für ein Schmerz.

EDIT: Es stellt sich heraus, dass Sie Anmerkungen benötigen, um die meisten Sachen zu tun. Diese Übung bleibt dem Leser überlassen. Ich habe auch festgestellt, dass Sie download the jars for the new (fixed) version on Maven können.