Json解析之动态key和key为关键字问题(JAVA初级)

在我们编程过程中Json的数据格式是最常见不过了,并且Json解析的库也有很多比如阿里巴巴的Fastjson、Google的gson、JackSon以及org.json等,因fastjson和gson解析速度快、可以进行反射解析等优点所以很多人比较喜欢使用;在我们使用json解析的过程中除了一些标准的JsonArray和JsonObject数据格式以外还有一些特殊的数据格式和书写方式,下面我们来看下大家时不时会遇到的奇葩问题;

1、Json对象中出现key值为关键字的问题

这种情况下我们正常的使用一样的命名方式肯定是不行的(手动解析JsonObject除外~),因为编译工具是不允许你命名的变量名称为一些关键字的,对于这种情况我们还想用反射解析的话,可以通过注解的方式关联解析对象的key来解决这个问题,具体如下:

(1)fastjson使用者

@JSONField(name = “switch”)
public String myswitch;

(2)Gson

@SerializedName(“abstract”)
public String myabstract;

以上如果变量命名为private则在set和get方法上添加对应的注解;

2、Json数据出现动态key问题,如下格式:

 "data": {
    "61": "门窗",
    "305": "暖气",
    "517": "验房",
    "899": "收房",
    "8039": "交房",
    "8153": "验房工具",
    "8154": "墙顶验收",
    "8159": "地面验收",
    "8161": "上水",
    "8163": "下水",
    "8164": "强电",
    "8165": "弱电",
    "8166": "燃气",
    "8667": "防水"
}

上面这种数据格式可以使用fastjson和org.json进行数据解析,解析方式如下:

fastJson解析方式:

Map stringMap =newHashMap<>();
JSONObject jsonObject = JSON.parseObject(result);
Set keys = jsonObject.keySet();
Iterator iterator = keys.iterator();
while(iterator.hasNext()){
String key = (String) iterator.next();
   Log.e("tag","key: "+key);
   stringMap.put(key,jsonObject.getString(key));
}

org.json的解析方式:

org.json.JSONObject object =null;

try{
   object =neworg.json.JSONObject(result);
   Iterator iterator2 = object.keys();
//此处为Iterator遍历
}catch(JSONException e) {
   e.printStackTrace();
}

你可能感兴趣的:(JAVA,解析)