Разбор JSON с высоким уровнем "неизвестных" имен - PullRequest
0 голосов
/ 21 февраля 2012

Как вы анализируете структуру 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 / Exhibition_Created_about_this_subject "

Я пытался Джексон, но не вижу, как создать класс Java, который соответствует этой структуре.он выглядит как массив, но не окружен "[" или "]".

структура повторяет "ожидаемый_тип", "текст", "значения" и т. д. Что мне не хватает?

Ответы [ 2 ]

1 голос
/ 25 июня 2012

Хорошо.У меня та же проблема.Но ваш ответ не очень полезен для меня.Я уверен, что вы создали отличное приложение, и я рад за вас, что вы смогли решить эту проблему.Но у меня нет времени копаться в вашем исходном коде на 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;
}

С помощью этой аннотации вы можете обрабатывать любые неизвестные свойства в потоке JSON.Это сработало для меня.

1 голос
/ 31 марта 2012

После столкновения с кирпичной стеной я связался с Тату Салоранта который был чрезвычайно полезным. с его помощью мне удалось заполнить мое Android-приложение Freebase Explorer. Я сделал исходный код моего приложения для Android доступным в GITHUB, если кому-то интересно.

Исходный код GITHUB

Приложение для Android также доступно здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...