做客户端开发要经常的和服务端进行交互,现在基本上都是使用 json 进行交互的,所以对于 json 的生成和解析变得尤为重要,下面对自己日常工作中使用 json 的进行一个记录如下, 以便一些刚学习的小伙伴参考和自己以后翻阅。
- compile 'com.alibaba:fastjson:1.2.24'
我们在日常和服务器交互的时候,经常是通过 json 字符串进行的,首先就先演示下如何造出下面的 json 字符串:
- {
- "cmd":"myApp/app/userCenter/queryFriend",
- "userToken":"bfcb38b5bcbf463af031a1e7b9d284af",
- "parameters":
- {
- "friend":"myGirlFriends"
- }
- }
初步通过下面的代码实现:
- //parametersMap用来生成parameters
- Map<String, String> parametersMap = new HashMap<>();
- parametersMap.put("friend", "myGirlFriends");
- //upMap用来生成最终的上传数据
- Map<String, Object> upMap = new HashMap<>();
- upMap.put("cmd", "myApp/app/userCenter/queryFriend");
- upMap.put("userToken", "fc8b87f32bbdd8200de192350fd133cc");
- upMap.put("parameters", parametersMap);
这个时候的数据是这样的:
- {
- cmd = myApp / app / userCenter / queryFriend,
- userToken = fc8b87f32bbdd8200de192350fd133cc,
- parameters = {
- friend = myGirlFriends
- }
- }
上面只是生成了一组 map 对象,我们和服务器交互是通过 json 字符串进行的,请看下面代码:
- //JSON包名为:import com.alibaba.fastjson.JSON;
- String upParams = JSON.JSON.toJSONString(upMap);
这个时候 upParams 的结构就是我们想要的结构了
- {
- "cmd": "myApp/app/userCenter/queryFriend",
- "userToken": "fc8b87f32bbdd8200de192350fd133cc",
- "parameters": {
- "friend": "myGirlFriends"
- }
- }
upParams 可以用来发送请求了。通过上面的例子,基本可以满足和服务器交互的请求格式,格式复杂点话,可能会有多层嵌套,只用使用 Map 来制造嵌套,最后使用 fastjson 进行转换就好了。
比如现在有一个 json 字符串需要我们解析,如下:
- {
- "name": "sean",
- "id": "1",
- "joined": [
- {
- "joinName": "joined1",
- "joinId": "10"
- },
- {
- "joinName": "joined2",
- "joinId": "11"
- },
- {
- "joinName": "joined3",
- "joinId": "12"
- }
- ]
- }
获得这个 json 对象 只需要一行代码即可完成:
- //string:json字符串
- //jsonObject:生成的json对象
- JSONObject jsonObject = JSON.parseObject(string);
- string name = jsonObject.getString("name");
- Log.d("name= " + name);
得到的值为 name= sean
一行代码:
- //jsonObject:json对象
- //joined:json对象中的一个字段,里面保存的是一个json数组。
- JSONArray joinedArray = jsonObject .getJSONArray("joined");
- 此时,joinedArray 中的值为:
- [
- {
- "joinName": "joined1",
- "joinId": "10"
- },
- {
- "joinName": "joined2",
- "joinId": "11"
- },
- {
- "joinName": "joined3",
- "joinId": "12"
- }
- ]
遍历该数组:
- for (int i = 0; i < joinedArray.size(); i++) {
- JSONObject obj = joinedArray.getJSONObject(i);
- Log.d("id= " + obj.getJoinId);
- Log.d("name= " + obj.getJoinName);
- }
此时打印数据:
- id= 10
- name= joined1
- id= 11
- name= joined2
- id= 12
- name= joined3
以上是个人总结,有什么不对的地方欢迎指出、交流。
来源: https://juejin.im/post/5a39e33f5188252a3d382464