它们三个我就不一一介绍了,相信大家都已经有所了解,我就记录下我在工作中遇到的一个问题。
通常情况下,我工作中解析json字符串我会使用JSON去处理,类似这样:
CLass class = JSON.parseObject("字符串",Class.class);//字符串转化为指定对象
String str = JSON.toJSONString(Object);//对象转化为字符串
直到有一天,上游系统给我发了这样一段字符串:
{
"stud": [
{
"name": "张三",
"age": "10"
},
{}
]
}
说实话,我当时就蒙了,为啥蒙呢?
首先第一行是
大括号
,说明这是一个JSON类型的字符串,不是JSONArray类型的,因为JSONArray类型的字符串最外层是中括号
。 类似这样:
[
{
"name": "张三",
"age": "10"
},
{}
]
但是,作为JSON字符串,里面又是个循环,很容易发现,这个字符串数据最外层缺少了一层,这样的数据让我百思不得其解,想不明白这是如何转化的。
直到我看到了
JSONObject
,这玩意儿好啊,好在哪呢?它里面可以存放key-value类型的数据。结果呼之欲出,上游系统生成的字符串数据是这么来的:
Stud stud = new Stud();//学生类,里面有name 和 age 两个属性
stud.setname("张三");
stud.setage(10);
JSONObject jsonObject = new JSONObject();//新建JSONObject对象
JSONArray jsonArray = new JSONArray();//JSONArray
jsonArray.add(stud);//把学生对象放进jsonArray中,注意这里可以循环新建stud对象并放入
jsonObject.put("stud",jsonArray);//把JSONArray以kye-value的形式放入到JSONObject中。
String sendStr = jsonObject.toJSONString();//最后转化成json字符串传递给我
到这里相信大家已经看懂了,那我作为下游接收方如何解析这个字符串呢?
//把接收到的字符串处理为JSONObject对象
JSONObject jsonstr = JSONObject.parseObject(sendStr);
JSONArray jsonArray = (JSONArray) jsonstr.get("stud");//使用get()获取JSONArray对象
int size = studArray.size();//获取JSONArray对象的大小
//接下来循环处理获取到的对象数据就可以了
好好好,真不知道如何循环是吧?那我再写点儿
for (int i=0;i<jsonArray.size();i++){//这里建议用i循环,因为要有一个类型转化
Map<String,String> map = (Map) jsonArray.get(i);//这样就可以获取到对象了。
}