#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, которые вам помогут.
ОБНОВЛЕНО
Попробуйте так,
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» и т.д.