7

我正在尝试学习如何使用杰克逊解析器,以更有效地解析 json 数据。我有这些 jar 文件: 从这个页面下载

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

在代码中,我只是尝试将 json 解析为对象数组:

@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));
} 

不确定是否有必要,但这里也是我的 Category 类:

@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;
    }

}

一切似乎都很好,没有错误或警告。但是当我尝试编译时,它给出了这个错误:

[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

当我在谷歌上搜索这个错误时,它说这些 jar 文件有一些共同的类。而且我不知道该怎么做......我做错了什么吗?或者我做了一些缺少的事情?

在此先感谢,任何帮助表示赞赏。

4

4 回答 4

12

2.2.0 版本已报告此问题,请参阅此问题;但应该在 2.2.1 中解决。

编辑:事实证明,主要问题是这些文件需要位于META-INF/jar 下;如果是这样,则不存在冲突。这就是 2.2.1 一旦发布就会做的事情。

于 2013-04-26T17:08:18.443 回答
3

有点痛苦,但手动重建罐子并没有那么糟糕。

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

乐叹息。多么痛苦。

编辑:原来你需要注释来做大多数事情。该练习留给读者。我还发现您可以在 Maven 上下载新(固定)版本的 jar

于 2013-05-04T00:41:19.043 回答
2

As steve says in his last edit, you can download the newest jars from Maven: http://repo1.maven.org/maven2/com/fasterxml/jackson/core/

于 2013-06-08T19:41:03.993 回答
2

我也有同样的问题。所以,我使用旧版本。

杰克逊核心asl-1.9.12.jar

jackson-mapper-asl-1.9.12.jar

您可以从同一页面的“最新稳定 1.x 版本”下载。

于 2013-04-25T06:55:18.520 回答