2016-09-13 1 views
0

У меня есть следующий код, который возвращает объект json. И мне нужно отфильтровать электронную почту отправителя, тему и createDate. Код выполняет эту работу, но я чувствовал, что есть эффективный способ сделать это. Я ценю ваше предложение.Каков эффективный способ получить поля от этого объекта JSON?

ResponseEntity<String> response = 
          restTemplate.exchange(app.getResourceUrl() + personnelEmail+ 
          MESSAGE+"/?$select=Sender,Subject,CreatedDateTime", HttpMethod.GET, request, String.class); 

        String str=response.getBody(); 
        JSONObject jsonObject= new JSONObject(str); 
        JSONArray arrayList= (JSONArray)jsonObject.get("value"); 

        List l=arrayList.toList(); 

        for(int i=0;i<l.size();i++){ 
         HashMap<String,HashMap> hashMap=(HashMap<String,HashMap>)l.get(i); 

         HashMap<String,HashMap> sender= hashMap.get("sender"); 
         HashMap<String,String> senderEmail= sender.get("emailAddress"); 

         String email= senderEmail.get("address"); 

        } 

Вот объект json, который я получаю от MS Office API.

{ "@ odata.context": "https://graph.microsoft.com/v1.0/ $ метаданных # пользователей ('user34.onmicrosoft.com')/сообщения (отправитель, тема, createdDateTime)", "значение": [{ "@ OData. etag ":" W/\ "sljkasfdiou7978klosadf \" "," id ":" lkjasdfu97978KLJASDFS_WGHJJ76J897DKdcuvtymBTItq836K34PUAAAvoK3SAAA = "," createdDateTime ":" 2016-08-27T04: 07: 08Z "," subject ":" View ваш офис 365 Enterprise E3 billing statement "," sender ": {" emailAddress ": {" name ":" Microsoft Online Services Команда "," адрес ":" [email protected] "}}}, {" @ odata.etag ":" W/\ "JUU70303 \" "," id ":" UEYO93988FK; O38GV3J884 = "," createdDateTime ":" 2016-08-26T15: 28: 47Z "," subject ":" Order Подтверждение: Спасибо для вашего покупки "," se nder ": {" emailAddress ": {" name ":" Microsoft Online Services Команда "," адрес ":" [email protected] "}}}, {" @ odata.etag ":" W/\ "LJKOIU987983 \" "," id ":" ladjksflk83l.x8783LKFW3 = "," createdDateTime ":" 2016-06-24T03: 03: 26Z "," subject ":" Внимание: Ваша пробная подписка на Microsoft Azure Active Directory Premium будет быть отключены в ближайшее время», "отправитель": { "EMAILADDRESS": { "имя": "Microsoft Online Services Team", "адрес": "[email protected]"}}}]}

+0

Я бы порекомендовал вам потратить некоторое время на изучение FASTER XML jackson json parser.особенно http://www.cowtowncoder.com/blog/archives/2011/07/entry_458.html – Hector

ответ

1

По умолчанию полезная нагрузка отклика API REST Office 365 также включает в себя общие annotations, такие как:

  • odata.context: контекст URL полезной нагрузки
  • odata.etag: в ETag данного лица, в случае необходимости

Ниже картина демонстрирует его

enter image description here

Как вы уже могли догадаться его можно было бы контролировать с помощью odata.metadata parameter:

odata.metadata parameter может быть применен к заголовку Accept запроса OData, чтобы повлиять на то, сколько информации управления будет , включенных в ответ.

Пример (C# версия)

В этом примере показано, как задать odata.metadata=none параметр формата для с помощью Accept заголовка указывают, что информацию управления

using (var client = new HttpClient(handler)) 
{ 
    var url = "https://outlook.office365.com/api/v1.0/me/messages?$select=Sender,Subject,DateTimeCreated"; 
    client.DefaultRequestHeaders.Accept.Add(MediaTypeWithQualityHeaderValue.Parse(GetMediaType("none",false,false))); 
    var result = await client.GetStringAsync(url); 
    var data = JObject.Parse(result); 

    foreach (var item in data["value"]) 
    { 
     //process item; 
    } 
} 

служба должна опустить, где

private static string GetMediaType(string metadata,bool streaming,bool IEEE754Compatible) 
{ 
    return String.Format("application/json; OData.metadata={0}; OData.streaming={1}; IEEE754Compatible={2}",metadata,streaming, IEEE754Compatible); 
} 
+0

Спасибо за пример о том, как опустить ненужные данные. По крайней мере, это помогло мне избежать ответов, связанных с Одатой, которые нам не нужны, но я все равно должен пройти тот же маршрут, что и в своем коде, чтобы получить предмет. Я думал, что будет такой способ, как jsonObject.get («value.sender»), но он так не работал. – WowBow

Смежные вопросы