无法将 google-api-services-admin-directory 组织转换为 JSONArray。由于缺少 customType 值

Not able to convert google-api-services-admin-directory Organizations To JSONArray. Because of customType value is missing

我无法将 google-api-services-admin-directory Organization 转换为 JSONArray,因为抛出了以下异常:

Exception message : Missing value at character 38

我有这个代码:

Get user = directoryService.users().get("mangesh@domain.in");

User domainUserObj = user.execute();

logger.warning("Organizations "+domainUserObj.getOrganizations());

JSONArray userOrgJsonArr = new JSONArray(domainUserObj.getOrganizations().toString());

logger.warning("Organizations-JsonArr "+userOrgJsonArr);

然后我像这样从 API 中获取数据

Organizations [{title=Dev, primary=true, customType=, department=R&D, description=Permanant, costCenter=Cost Test 12}]

我用的JAR版本是google-api-services-admin-directory-directory_v1-rev72-1.22.0.jar

完成异常堆栈跟踪

2018 年 7 月 26 日7:57:52下午com.company.project.ApiTestServeletdoGet 警告:组织[{title=Dev,primary=true,customType=,department=R&D,description=Permanant,costCenter=Cost Test 12}]

Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING: Exception message : Missing value at character 38 Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING: Error in class ApiTestServelet Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.json.JSONTokener.syntaxError(JSONTokener.java:410) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING: org.json.JSONTokener.nextValue(JSONTokener.java:369) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.json.JSONObject.(JSONObject.java:205) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.json.JSONTokener.nextValue(JSONTokener.java:344) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING: org.json.JSONArray.(JSONArray.java:125) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING: org.json.JSONArray.(JSONArray.java:157) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
com.company.project.ApiTestServelet.doGet(ApiTestServelet.java:122) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
javax.servlet.http.HttpServlet.service(HttpServlet.java:617) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
com.company.project.filter.XSSFilter.doFilter(XSSFilter.java:69) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:72) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:134) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:48) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
com.google.appengine.tools.development.DevAppServerRequestLogFilter.doFilter(DevAppServerRequestLogFilter.java:44) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:95) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:508) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.Server.handle(Server.java:326) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) Jul 26, 2018 7:57:52 PM com.company.project.utility.ErrorHandler errorHandler WARNING:
org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

我找到了解决办法,就是用com.google.api.client.util.ArrayMap迭代数据

但我不明白为什么 customType 从 API 变空了。

ArrayList orgArrList = (java.util.ArrayList)domainUserObj.getOrganizations();

for(int i = 0 ; i < orgArrList.size(); i++) {
    System.out.println("For getOrganizations ::"+orgArrList.get(i));                
    ArrayMap<String,String> orgMapArr = (ArrayMap<String, String>)
                                         orgArrList.get(i);
    System.out.println("ArrayMap-UserOrganization ::"+orgMapArr);           
    for(int index=0; index < orgMapArr.size();index++) {
    try {
        System.out.println(orgMapArr.getKey(index) + " "
                                   + orgMapArr.getValue(index));
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

输出:

For getOrganizations ::{title=Dev, primary=true, customType=, department=R&D, description=Permanant, costCenter=Cost Test 12}

ArrayMap-UserOrganization ::{title=Dev, primary=true, customType=, department=R&D, description=Permanant, costCenter=Cost Test 12}

title Dev java.lang.Boolean cannot be cast to java.lang.String customType department R&D description Permanant costCenter Cost Test 12