最近打通博客園相關API和其它第三方API,由於我開發的系統內部需要調用較多的第三方API,所以用到了SpringCloud中的Feign。
由於之前開發的系統基本上除了支付是用的微信或支付寶以及智能門鎖用的是第三方之外,其它很少涉及。
今天在做遷移博客數據的時候發現,通過Feign調用第三方時解析數組出現問題。
出現這樣類似的錯誤,如下:
A JSONObject text must begin with '{' at character 1 of 1
問題原因是因為我所返回的數據是這樣的格式[{}],例如:
[ { "Id": 13086998, "Title": "SLF4J: Class path contains multiple SLF4J bindings.", "Url": "http://www.cnblogs.com/youcong/p/13086998.html", "Description": "錯誤信息: SLF4J Warning: Class Path Contains Multiple SLF4J Bindings 錯誤原因:我個人博客系統一個爬蟲組件用到webmagic,而webmagic與lomback中的slf有沖突。 解決辦法(webmagic排除相關依賴即可): <!-- ", "Author": "挑戰者V", "BlogApp": "youcong", "Avatar": "https://pic.cnblogs.com/face/1255290/20190518211156.png", "PostDate": "2020-06-10T21:15:00", "ViewCount": 11, "CommentCount": 0, "DiggCount": 0 }, { "Id": 13086991, "Title": "SpringCloud之Security", "Url": "http://www.cnblogs.com/youcong/p/13086991.html", "Description": "Spring Security是Spring提供的一個安全框架,提供認證和授權功能,最主要的是它提供了簡單的使用方式,同時又有很高的靈活性,簡單,靈活,強大。 我個人博客系統采用的權限框架就是Spring Security,正好整合到SpringCloud里面。一般系統里關於角色方面通常有這么幾張表", "Author": "挑戰者V", "BlogApp": "youcong", "Avatar": "https://pic.cnblogs.com/face/1255290/20190518211156.png", "PostDate": "2020-06-10T21:14:00", "ViewCount": 150, "CommentCount": 0, "DiggCount": 0 }, { "Id": 13066768, "Title": "SpringCloud之Config", "Url": "http://www.cnblogs.com/youcong/p/13066768.html", "Description": "配置中心,也就是SpringCloud中的Config組件,主要應用在哪些方面? 配置文件方便維護 配置文件內容安全和權限 更新項目配置不需要重啟 本文主要圍繞兩個方面,一個是Config Server,另一個是Config Client。還是以我個人博客系統其中的一個模塊為例。 一、搭建Confi", "Author": "挑戰者V", "BlogApp": "youcong", "Avatar": "https://pic.cnblogs.com/face/1255290/20190518211156.png", "PostDate": "2020-06-08T21:07:00", "ViewCount": 8, "CommentCount": 0, "DiggCount": 0 }, { "Id": 13066734, "Title": "SpringCloud之Zuul", "Url": "http://www.cnblogs.com/youcong/p/13066734.html", "Description": "使用SpringCloud Zuul實現網關代理。 一、Maven依賴 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</", "Author": "挑戰者V", "BlogApp": "youcong", "Avatar": "https://pic.cnblogs.com/face/1255290/20190518211156.png", "PostDate": "2020-06-08T21:06:00", "ViewCount": 19, "CommentCount": 0, "DiggCount": 0 }, { "Id": 13066804, "Title": "SpringCloud之Ribbon", "Url": "http://www.cnblogs.com/youcong/p/13066804.html", "Description": "SpringCloud通過Ribbon實現負載均衡。 一、添加Maven依賴 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-clien", "Author": "挑戰者V", "BlogApp": "youcong", "Avatar": "https://pic.cnblogs.com/face/1255290/20190518211156.png", "PostDate": "2020-06-08T21:05:00", "ViewCount": 10, "CommentCount": 0, "DiggCount": 0 }, { "Id": 13066706, "Title": "SpringCloud之Hystrix", "Url": "http://www.cnblogs.com/youcong/p/13066706.html", "Description": "在微服務架構中,微服務之間互相依賴較大,相互之間調用必不可免的會失敗。但當下游服務A因為瞬時流量導致服務崩潰,其他依賴於A服務的B、C服務由於調用A服務超時耗費了大量的資源,長時間下去,B、C服務也會崩潰。Hystrix就是用來解決服務之間相互調用失敗,避免產生蝴蝶效應的熔斷器,以及提供降級選項。H", "Author": "挑戰者V", "BlogApp": "youcong", "Avatar": "https://pic.cnblogs.com/face/1255290/20190518211156.png", "PostDate": "2020-06-08T21:04:00", "ViewCount": 14, "CommentCount": 0, "DiggCount": 0 }, { "Id": 13066686, "Title": "SpringCloud之Feign", "Url": "http://www.cnblogs.com/youcong/p/13066686.html", "Description": "以我個人寫的博客系統為例,請求其它微服務API。 一、添加Maven依賴 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId>", "Author": "挑戰者V", "BlogApp": "youcong", "Avatar": "https://pic.cnblogs.com/face/1255290/20190518211156.png", "PostDate": "2020-06-08T21:03:00", "ViewCount": 8, "CommentCount": 0, "DiggCount": 0 }, { "Id": 13042794, "Title": "SpringCloud之服務注冊中心和提供者(Eureka Server和Eureka Client)", "Url": "http://www.cnblogs.com/youcong/p/13042794.html", "Description": "一、使用Eureka Server搭建服務注冊中心 1.Maven依賴 <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-", "Author": "挑戰者V", "BlogApp": "youcong", "Avatar": "https://pic.cnblogs.com/face/1255290/20190518211156.png", "PostDate": "2020-06-08T21:01:00", "ViewCount": 17, "CommentCount": 0, "DiggCount": 0 }, { "Id": 13027193, "Title": "GitHub Pages Hexo 配置來自阿里雲的域名或騰訊雲的域名", "Url": "http://www.cnblogs.com/youcong/p/13027193.html", "Description": "參考地址如下(親試有效,我的博客應該試過了,可以指向我的域名,之所以我沒有指向是因為博客的閱讀量和訪問等目前不能遷移所以就不做指向了):Github個人博客:綁定域名 騰訊雲GitHub Pages Hexo 配置來自阿里雲的域名", "Author": "挑戰者V", "BlogApp": "youcong", "Avatar": "https://pic.cnblogs.com/face/1255290/20190518211156.png", "PostDate": "2020-06-08T20:59:00", "ViewCount": 11, "CommentCount": 0, "DiggCount": 0 }, { "Id": 13066658, "Title": "博客園開放API如何使用", "Url": "http://www.cnblogs.com/youcong/p/13066658.html", "Description": "業務背景:我通過weblogic這個Java爬蟲框架是能夠爬取得到博客園的大多數數據,但后來得知博客園有自己的開放API,通過這個開放API可以做一些事情,比方說實現一個關於博客園文章的小程序閱讀、或者想學習go、node.js、flutter或uniapp用其實現一個CMS應用。 一、API KE", "Author": "挑戰者V", "BlogApp": "youcong", "Avatar": "https://pic.cnblogs.com/face/1255290/20190518211156.png", "PostDate": "2020-06-08T20:55:00", "ViewCount": 25, "CommentCount": 0, "DiggCount": 0 } ]
直接用JSONObject解析是不行的,需要用JSONArray去做。
解決問題核心代碼:
String result = cnBlogApiService.getPersonalBlogPostList(pageIndex, accessToken); //取第三方API返回的JSON數據 JSONArray jsonArray = new JSONArray(result); if(jsonArray.size()>0){ for(int i = 0 ;i<jsonArray.size();i++){ JSONObject jsonObject =jsonArray.getJSONObject(i); System.out.println("js:"+jsonObject.getStr("Url")); } }