使用高级“未知”名称解析json

时间:2012-02-20 21:16:35

标签: json jackson

如何解析JSON结构,例如

  "properties": {
    "/base/pinball/pinball_machine_basis/pinball_machines": {
      "expected_type": {
        "id": "/base/pinball/pinball_machine",
        "text": "Pinball Machine"
      },
      "text": "Pinball Machines",
      "values": [
        {
          "id": "/m/026z8cp",
          "text": "The Lord of the Rings",
          "url": "http://www.freebase.com/view/m/026z8cp"
        }
      ]
    },
    "/common/topic/article": {
      "expected_type": {
        "id": "/common/document",
        "text": "Document"
      },
      "text": "article",
      "values": [
        {
          "id": "/m/025h5z",
          "text": "",
          "url": "http://www.freebase.com/view/m/025h5z"
        }
      ]
    },
    "/common/topic/image": {
      "expected_type": {
        "id": "/common/image",
        "text": "Image"
      },
      "text": "image",
      "values": [
        {
          "id": "/m/029wvk4",
          "text": "The Lord of the Rings: The Motion Picture Trilogy poster (2003)",
          "url": "http://www.freebase.com/view/m/029wvk4"
        },
        {
          "id": "/m/0bdyf3j",
          "text": "",
          "url": "http://www.freebase.com/view/m/0bdyf3j"
        },
        {
          "id": "/m/0glyg_4",
          "text": "lotr-extended-blu-ray.jpg",
          "url": "http://www.freebase.com/view/m/0glyg_4"
        }
      ]
    },

我事先不会知道高级别名称,例如“/ base / pinball / pinball_machine_basis / pinball_machines”,“/ common / topic / article”,或“/ exhibitions / exhibition_subject / exhibitions_created_about_this_subject”

我已经尝试过杰克逊但是看不出如何生成一个匹配这个结构的java类。它是一个数组,但不是用“[”或“]”包围。

结构重复“expected_type”,“text”,“values”等我错过了什么?

2 个答案:

答案 0 :(得分:1)

我遇到了这个问题,我联系了Tatu Saloranta 谁非常有帮助。在他的帮助下,我设法完成了我的Freebase Explorer Android应用程序。如果有人感兴趣,我已经在GITHUB中提供了我的Android应用程序源代码。

GITHUB source Code

Android应用程序也可用here

答案 1 :(得分:1)

好。我也有同样的问题。但你的回答对我没有多大帮助。我相信你创造了一个很棒的应用程序,我很高兴你能解决问题。但我没有时间在GitHub上挖掘您的源代码。如果你能发布解决问题的代码片段,我真的很感激。非常感谢。

经过一些研究后,我在@JsonAnySetter找到了这个解决方案:

private Map<String, Object> all = new HashMap<String, Object>();

@JsonAnySetter
public void set(String name, Object value) {
    all.put(name, value);
}

public Map<String, Object> getAll() {
    return all;
}

public void setAll(Map<String, Object> all) {
    this.all = all;
}

使用此Annotation,您可以处理JSON流中的任何类型的未知属性。这对我有用。