如何接收形式不定的Json

u012525643 2016-09-20 11:54:21
最近公司在让我封装一个UPS公司的“街道级别地址验证”的接口

初步的思路是通过http请求获得json的字符串

然后再使用Jackson将之转化为已写好的实体类,方便之后操作

但是经过测试,发现一个严重的问题,那就是返回的Json格式不定

下面是一个返回的Json的例子:

{
"XAVResponse": {
"Response": {
"ResponseStatus": {
"Code": "1",
"Description": "Success"
}
},
"AmbiguousAddressIndicator": "",
"Candidate": [
{
"AddressKeyFormat": {
"AddressLine": "100-198 HERNDON PKWY",
"PoliticalDivision2": "HERNDON",
"PoliticalDivision1": "VA",
"PostcodePrimaryLow": "20170",
"PostcodeExtendedLow": "45ND",
"Region": "HERNDON VA 20170-45ND",
"CountryCode": "US"
}
},
{
"AddressKeyFormat": {
"AddressLine": "101-199 HERNDON PKWY",
"PoliticalDivision2": "HERNDON",
"PoliticalDivision1": "VA",
"PostcodePrimaryLow": "20170",
"PostcodeExtendedLow": "4524",
"Region": "HERNDON VA 20170-4524",
"CountryCode": "US"
}
},
{
"AddressKeyFormat": {
"AddressLine": "516 HERNDON PKWY",
"PoliticalDivision2": "HERNDON",
"PoliticalDivision1": "VA",
"PostcodePrimaryLow": "20170",
"PostcodeExtendedLow": "6230",
"Region": "HERNDON VA 20170-6230",
"CountryCode": "US"
}
},
{
"AddressKeyFormat": {
"AddressLine": [
"516 HERNDON PKWY",
"STE A-D"
],
"PoliticalDivision2": "HERNDON",
"PoliticalDivision1": "VA",
"PostcodePrimaryLow": "20170",
"PostcodeExtendedLow": "6230",
"Region": "HERNDON VA 20170-6230",
"CountryCode": "US"
}
},
{
"AddressKeyFormat": {
"AddressLine": "520 HERNDON PKWY",
"PoliticalDivision2": "HERNDON",
"PoliticalDivision1": "VA",
"PostcodePrimaryLow": "20170",
"PostcodeExtendedLow": "6217",
"Region": "HERNDON VA 20170-6217",
"CountryCode": "US"
}
},
{
"AddressKeyFormat": {
"AddressLine": [
"520 HERNDON PKWY",
"STE A-H"
],
"PoliticalDivision2": "HERNDON",
"PoliticalDivision1": "VA",
"PostcodePrimaryLow": "20170",
"PostcodeExtendedLow": "6218",
"Region": "HERNDON VA 20170-6218",
"CountryCode": "US"
}
},
{
"AddressKeyFormat": {
"AddressLine": [
"555 HERNDON PKWY",
"STE 250"
],
"PoliticalDivision2": "HERNDON",
"PoliticalDivision1": "VA",
"PostcodePrimaryLow": "20170",
"PostcodeExtendedLow": "5248",
"Region": "HERNDON VA 20170-5248",
"CountryCode": "US"
}
},
{
"AddressKeyFormat": {
"AddressLine": [
"555 HERNDON PKWY",
"STE 135"
],
"PoliticalDivision2": "HERNDON",
"PoliticalDivision1": "VA",
"PostcodePrimaryLow": "20170",
"PostcodeExtendedLow": "5248",
"Region": "HERNDON VA 20170-5248",
"CountryCode": "US"
}
},
{
"AddressKeyFormat": {
"AddressLine": [
"555 HERNDON PKWY",
"STE 125"
],
"PoliticalDivision2": "HERNDON",
"PoliticalDivision1": "VA",
"PostcodePrimaryLow": "20170",
"PostcodeExtendedLow": "5250",
"Region": "HERNDON VA 20170-5250",
"CountryCode": "US"
}
},
{
"AddressKeyFormat": {
"AddressLine": [
"555 HERNDON PKWY",
"STE 100-110"
],
"PoliticalDivision2": "HERNDON",
"PoliticalDivision1": "VA",
"PostcodePrimaryLow": "20170",
"PostcodeExtendedLow": "5262",
"Region": "HERNDON VA 20170-5262",
"CountryCode": "US"
}
},
{
"AddressKeyFormat": {
"AddressLine": [
"555 HERNDON PKWY",
"STE 200-220"
],
"PoliticalDivision2": "HERNDON",
"PoliticalDivision1": "VA",
"PostcodePrimaryLow": "20170",
"PostcodeExtendedLow": "5262",
"Region": "HERNDON VA 20170-5262",
"CountryCode": "US"
}
},
{
"AddressKeyFormat": {
"AddressLine": "555 HERNDON PKWY",
"PoliticalDivision2": "HERNDON",
"PoliticalDivision1": "VA",
"PostcodePrimaryLow": "20170",
"PostcodeExtendedLow": "5276",
"Region": "HERNDON VA 20170-5276",
"CountryCode": "US"
}
},
{
"AddressKeyFormat": {
"AddressLine": [
"555 HERNDON PKWY",
"STE 230-240"
],
"PoliticalDivision2": "HERNDON",
"PoliticalDivision1": "VA",
"PostcodePrimaryLow": "20170",
"PostcodeExtendedLow": "5291",
"Region": "HERNDON VA 20170-5291",
"CountryCode": "US"
}
},
{
"AddressKeyFormat": {
"AddressLine": [
"555 HERNDON PKWY",
"STE 260"
],
"PoliticalDivision2": "HERNDON",
"PoliticalDivision1": "VA",
"PostcodePrimaryLow": "20170",
"PostcodeExtendedLow": "5262",
"Region": "HERNDON VA 20170-5262",
"CountryCode": "US"
}
},
{
"AddressKeyFormat": {
"AddressLine": [
"555 HERNDON PKWY",
"STE 130"
],
"PoliticalDivision2": "HERNDON",
"PoliticalDivision1": "VA",
"PostcodePrimaryLow": "20170",
"PostcodeExtendedLow": "5262",
"Region": "HERNDON VA 20170-5262",
"CountryCode": "US"
}
}
]
}
}


可以看到 XAVResponse -> Candidate -> AddressKeyFormat下的AddressLine属性一会儿是String,一会儿是List

小弟刚刚工作,技术经验不足,实在是不知道该怎么去接收这样的Json了,难道最后还得用Map操作吗?

求各位前辈指导
...全文
183 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jio可 2016-09-20
  • 打赏
  • 举报
回复
就详细街道的区别也很好处理,你判断一下AddressLine是不是数组,如果是就转换成字符保存。或者你自己再加一个详细街道的字段保存数组小标是1的值
Go 旅城通票 2016-09-20
  • 打赏
  • 举报
回复
js接收这种数据没什么,没有严格类型,服务器端的话就不好搞了 客户端最好处理成一种形式。。要不服务器端序列化为类实例要报错。。可以缺少属性,但是同一个属性不同类型可能处理不了。

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧