Java使用jackson问题解决

Java使用jackson问题解决

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.

蕃薯耀 2015年9月19日 14:50:37 星期六

http://fanshuyao.iteye.com/

一、描述

使用jackson处理查询淘宝手机号码归属返回的json数据时,发现程序报错。

二、淘宝手机号码归属查询接口

(https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=13430878244)

返回的数据如下:

__GetZoneResult_ = {    mts:'1343087',    province:'广东',    catName:'中国移动',    telString:'13430878244',	areaVid:'30517',	ispVid:'3236139',	carrier:'广东移动'}

三、错误一:

在标准json中,要求键和值都要用双引号("")包括的,而淘宝返回的值用单引号,所以报错。

com.fasterxml.jackson.core.JsonParseException: Unexpected character (''' (code 39)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')

四、错误一解决方法:

设置Feature.ALLOW_SINGLE_QUOTES为true,表示允许单引号

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(Feature.ALLOW_SINGLE_QUOTES, true);

五、错误二:

在标准json中,要求键和值都要用双引号("")包括的,而淘宝返回的健没有用引号,所以报错。

com.fasterxml.jackson.core.JsonParseException: Unexpected character ('m' (code 109)): was expecting double-quote to start field name

 六、错误二解决方法:

设置Feature.ALLOW_UNQUOTED_FIELD_NAMES为true,表示允许无引号包括的字段

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(Feature.ALLOW_SINGLE_QUOTES, true);
objectMapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);

 

七、完整代码

/**
	 * 淘宝手机归属地查询api
	 * @param phone
	 * @return
	 * @throws Exception
	 * @throws IOException
	 */
	@ResponseBody
	@RequestMapping("/getPhoneMessage")
	public String getPhoneMessage(@RequestParam(value="phone") String phone) throws Exception, IOException{
		//手机归属地查询api
		//淘宝,返回json
		//https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=13430878244
		
		//拍拍,返回json
		//http://virtual.paipai.com/extinfo/GetMobileProductInfo?mobile=13430878244&amount=10000&callname=getPhoneNumInfoExtCallback
		
		//百度钱包,返回json的unicode
		//https://www.baifubao.com/callback?cmd=1059&callback=phone&phone=13430878244
		
		URI uri = new URIBuilder().setScheme("https").setHost("tcc.taobao.com")
				.setPath("/cc/json/mobile_tel_segment.htm")
				.setParameter("tel", phone).build();
		CloseableHttpClient closeableHttpClient = HttpClients.createDefault();
		HttpGet httpGet = new HttpGet(uri);
		CloseableHttpResponse closeableHttpResponse =  closeableHttpClient.execute(httpGet);
		HttpEntity httpEntity = closeableHttpResponse.getEntity();
		InputStream inputStream = httpEntity.getContent();
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"GBK"));
		StringBuffer stringBuffer = new StringBuffer();
		String text = null;
		while((text =bufferedReader.readLine()) != null){
			stringBuffer.append(text);
		}
		inputStream.close();
		closeableHttpResponse.close();
		String jsonString = stringBuffer.toString().split("=")[1].trim();//处理=号前的非json字符串
		ObjectMapper objectMapper = new ObjectMapper();
		objectMapper.configure(Feature.ALLOW_SINGLE_QUOTES, true);//设置可用单引号
		objectMapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);//设置字段可以不用双引号包括
		JsonNode root = objectMapper.readTree(jsonString);
		return root.path("catName").asText() + root.path("carrier").asText();
	}

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.

蕃薯耀 2015年9月19日 14:50:37 星期六

http://fanshuyao.iteye.com/

猜你喜欢

转载自fanshuyao.iteye.com/blog/2244666