#android #json #parsing #mongodb #gson
#Android #json #синтаксический анализ #mongodb #gson
Вопрос:
Я пытаюсь проанализировать данные с облачного сервера MongoDB. Мои данные JSON, возвращаемые с сервера, выглядят следующим образом:
[
{
"_id": {
"$oid": "4e78eb48737d445c00c8826b"
},
"message": "cmon",
"type": 1,
"loc": {
"longitude": -75.65530921666667,
"latitude": 41.407904566666666
},
"title": "test"
},
{
"_id": {
"$oid": "4e7923cb737d445c00c88289"
},
"message": "yo",
"type": 4,
"loc": {
"longitude": -75.65541383333333,
"latitude": 41.407908883333334
},
"title": "wtf"
},
{
"_id": {
"$oid": "4e79474f737d445c00c882b2"
},
"message": "hxnxjx",
"type": 4,
"loc": {
"longitude": -75.65555572509766,
"latitude": 41.41263961791992
},
"title": "test cell"
}
]
Проблема, с которой я сталкиваюсь, заключается в том, что возвращаемая структура данных не содержит имени массива объектов JSON. Каждый возвращаемый объект является «сообщением». Но как мне проанализировать его с помощью GSON, если для массива объектов JSON нет имени. Я хотел бы поместить эти «сообщения» в ArrayList типа Post.
Ответ №1:
Фрагмент кода, который вы ищете:
String jsonResponse = "bla bla bla";
Type listType = new TypeToken<List<Post>>(){}.getType();
List<Post> posts = (List<Post>) gson.fromJson(jsonResponse, listType);
Комментарии:
1. Это должно быть принятым ответом. Ответ Sam_D работает, но этот код выглядит значительно быстрее и может быть заметен на больших массивах JSONArrays.
2. Да, намного быстрее при работе с большим json
3. потрясающе! не могли бы вы объяснить, как это работает? строки 2 и 3
Ответ №2:
Используйте конструктор для JSONArray для анализа строки:
//optionally use the com.google.gson.Gson package
Gson gson = new Gson();
ArrayList<Post> yourList = new ArrayList<Post>();
String jsonString = "your string";
JSONArray jsonArray = new JSONArray(jsonString);
for (int i = 0; i < jsonArray.length(); i ){
Post post = new Post();
//manually parse for all 5 fields, here's an example for message
post.setMessage(jsonArray.get(i).getString("message"));
//OR using gson...something like this should work
//post = gson.fromJson(jsonArray.get(i),Post.class);
yourList.Add(post);
}
Учитывая, что существует всего 5 полей, использование Gson может потребовать больше затрат, чем вам нужно.
Комментарии:
1. ну, я планирую добавить больше полей по мере продолжения моего проекта