Java-представление объекта JSON

#java #android #json #gson

#java #Android #json #gson

Вопрос:

Я пытаюсь десериализовать следующую строку, я несколько новичок в Java, и я не могу заставить это работать на всю жизнь… На данный момент я пытаюсь декодировать только две строки в объекте. Мои классы JSON и Java приведены ниже. Я получаю переменную результата в порядке.

 {
   "result": "true",
   "recentlyMarkedTerritories": {
      "0": {
         "pk_activity": "471",
         "fk_activity_type": "100",
         "activity_content": "Hhhhh",
         "fk_user": "2",
         "activity_image": "2_QZe73f4t8s3R1317230457.jpg",
         "created": "1317244857",
         "activity_status": "1",
         "activity_location_lat": "43.515283",
         "activity_location_lon": "-79.880678",
         "fk_walk": null,
         "fk_event_location": "73",
         "user_point": "0",
         "public_image": "0",
         "fk_event_location_lat": "43.515273",
         "fk_event_location_lon": "-79.879989",
         "profile_image": "2_y9JlkI3CZDml1312492743.jpg",
         "user_gender": "1",
         "user_dob": "236073600",
         "user_nickname": "junoman",
         "isFriend": "false",
         "profile_image_thumb": "2_y9JlkI3CZDml1312492743_t.jpg",
         "activity_image_thumb": "2_QZe73f4t8s3R1317230457_t.jpg",
         "relationship_status_idx": "2",
         "isBlocked": "false"
      },
      "1": {
         "pk_activity": "469",
         "fk_activity_type": "100",
         "activity_content": "Jsjsjs",
         "fk_user": "1",
         "activity_image": null,
         "created": "1317244508",
         "activity_status": "1",
         "activity_location_lat": "43.515283",
         "activity_location_lon": "-79.880678",
         "fk_walk": null,
         "fk_event_location": "73",
         "user_point": "0",
         "public_image": "0",
         "fk_event_location_lat": "43.515273",
         "fk_event_location_lon": "-79.879989",
         "profile_image": "1_4Cpkofueqnrb1316895161.jpg",
         "user_gender": "1",
         "user_dob": "116841600",
         "user_nickname": "JoePennington",
         "isFriend": "false",
         "profile_image_thumb": "1_4Cpkofueqnrb1316895161_t.jpg",
         "activity_image_thumb": null,
         "relationship_status_idx": "1",
         "isBlocked": "false"
      },
      .....
   }
}
  

И мой класс Java ниже

 RecentActivity infoList = null;
Gson gson = new Gson();
infoList = gson.fromJson(JSONString, RecentActivity.class);

public class RecentActivity {
    String resu<
    recentlyMarkedTerritories recentlyMarkedTerritories = null;

    public RecentActivity() {

    }

    public class recentlyMarkedTerritories {
        public Set<recentlyMarkedTerritories> pk_activity = new HashSet<recentlyMarkedTerritories>() ;

        public recentlyMarkedTerritories() {    }
    }
}
  

Пожалуйста, простите за отсутствие описания, но я уверен, что код помогает. JSON уже используется в других приложениях, поэтому его изменение не является вариантом .. 🙁

Спасибо!

Комментарии:

1. Как вы пытаетесь его десериализовать? Это код, который был бы полезен.

2. Я думаю, что это допустимый JSON.

Ответ №1:

Вот несколько хороших руководств по JSON, которые вам помогут.

GSON

JSON

Пример JSON с исходным кодом

ОБНОВЛЕНО

Попробуйте так,

  try {
            JSONObject object = new JSONObject(jsonString);
            JSONObject myObject = object.getJSONObject("recentlyMarkedTerritories");

            for (int i = 0; i < object.length(); i  ) {
                JSONObject myObject2 = myObject.getJSONObject(Integer.toString(i));
                System.out.println(myObject2.toString(2));  
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
  

Комментарии:

1. Я просматривал все это, и я не могу найти ничего, что объясняет, как называть или перебирать объекты с числовыми именами, как в приведенном выше json.. Почти кажется недостижимым на Java?

2. Это ваша полная строка JSON …?

3. Нет, это не полная строка.. Извините, я вроде как спрятал «….» после второй записи. Список может содержать 5 или, может быть, 100. Я принял ваш ответ, потому что мне было намного проще обрабатывать собственный Android JSONObject, чем Google GSONObject, и теперь я использую его. Спасибо за отличные ссылки и двигайтесь в правильном направлении!

Ответ №2:

Я не уверен в написании кода gson, но структура вашего json больше похожа на следующее представление Java (хотя вам могут понадобиться логические значения и целые числа вместо строковых полей):

 public class RecentActivity {
    String resu<
    Map<String,RecentlyMarkedTerritory> recentlyMarkedTerritories = null;
}

public class RecentlyMarkedTerritory {
    String pk_activity;
    // other fields
}
  

Комментарии:

1. Хммм, это не совсем работает, но, возможно, вы можете объяснить или намекнуть на это.. Что именно означает < > и как это называется? Я могу найти достаточно информации, чтобы понять правильные термины 🙂

2. @Daniel < > используют то, что называется Generics , и здесь они означают, что карта представляет собой отображение строк на недавно помеченные территориальные объекты. Строки будут «0», «1» и т.д.