从这个JSON对象获取字段的有效方法是什么?

时间:2016-09-13 18:03:13

标签: json parsing gson office365 azure-ad-graph-api

我有以下代码返回json对象。我需要过滤发件人电子邮件,主题和creationDate。代码完成了这项工作,但我觉得有一种有效的方法可以做到这一点。我很感激你的建议。

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");

                    }

这是我从MS Office API收到的json对象。

  

{ “@ 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“, ”受试者“:”查看   您的Office 365 Enterprise E3结算   声明“,”发件人“:{”emailAddress“:{”name“:”Microsoft Online Services   队 “” 地址”: “T45763@email.microsoftonline.com”}}},{ “@ odata.etag”:“W / \” JUU70303 \ ”“,”ID”:” UEYO93988FK; O38GV3J884 = “” createdDateTime “:” 2016-08-26T15:28:47Z “ ”主题“:” 订单   确认:谢谢你   购买“,”发件人“:{”emailAddress“:{”name“:”Microsoft Online Services   队 “ ”地址“: ”obue733@email.microsoftonline.com“}}},{ ”@ odata.etag“:” W / \” LJKOIU987983 \ “”,“ID”:” ladjksflk83l.x8783LKFW3 = ”“ createdDateTime “:” 2016-06-24T03:03:26Z “ ”主题“:” 注意:   您的Microsoft Azure Active Directory高级试用版订阅将   即将被禁用“,”发件人“:{”emailAddress“:{”name“:”Microsoft Online   服务团队“,”地址“:”635cdeee@email.microsoftonline.com“}}}}}

1 个答案:

答案 0 :(得分:1)

默认情况下,Office 365 REST API响应有效内容还包括常见的annotations,例如:

  • odata.context:有效负载的上下文网址
  • odata.etag:实体的ETag,视情况而定

下图展示了它

enter image description here

您可能已经猜到它可以通过odata.metadata parameter控制:

  

odata.metadata parameter可以应用于Accept标头   OData请求将影响控制信息的数量   包含在回复中。

示例(C#版本)

该示例演示了如何通过odata.metadata=none标头将<{1}}格式参数设置为表明服务应该省略控制信息

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;
     }
}
相关问题