`
阅读更多

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/

2
2
分享到:
评论

相关推荐

    java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingExcepti

    jackson-annotations-2.10.2.jar jackson-core-2.10.2.jar jackson-databind-2.10.2.jar NoClassDefFoundError解决

    jackson json 转 map 数值科学计数法的问题解决.docx

    将json转换为map之后,如果数值类型太多会在转换之后出现科学计数法的问题,经研究jackson源码、网上百度资料得知可以通过设置一些参数解决该问题

    jackson升级jar包2.12.4版本

    解决Jackson-databind任意文件读取漏洞,升级jar包,2.12.4版本

    java开源包8

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    JAVA上百实例源码以及开源项目

     使用Java语言编写的一款用于反映颜色变化的面板,也就是大家熟悉的颜色调色板演示程序。原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作...

    JAVA上百实例源码以及开源项目源代码

     使用Java语言编写的一款用于反映颜色变化的面板,也就是大家熟悉的颜色调色板演示程序。原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作...

    jackson-annotations-2.2.3.jar(Jackson解析需引入的包)

    jackson-annotations-2.2.3.jar(Jackson解析需引入的包),这是解决java对象和json数据转换的工具类包。

    jackson使用@JsonSerialize格式化BigDecimal解决.00不显示问题

    最近开发中使用BigDecimal这个数据类型 返回json数据时出现了点问题: # 1.前端第一次保存的时候 穿过来的数据格式 240.00 240.77 # 2. mysql数据库存储的数据格式(数据库字段已经设置了保留小数点后两位) 240 ...

    java开源包11

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包6

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包4

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包101

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包9

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    jackson-databind-2.7.5

    jackson-databind-2.7.5,解决Jmeter命令行执行时报jackson错误。JMeter命令行模式生成测试报告报“Uncaught Exception java.lang.NoClassDefFoundError:com/fasterxml/jsckson/da.

    java开源包5

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包10

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包3

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包1

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    jackson的7个jar包

    ModelAndView中返回json需要的jackson的相关jar包, 解决 java.lang.NoSuchMethodError:com.fasterxml.jackson.databind.JavaTyp异常e

Global site tag (gtag.js) - Google Analytics