缘起
JSON作为常用的接口(AJAX、REST等)数据交换格式,在特定流程场景中是经常出现的,而且如果能用接口的话,RPA的开发和维护也会省很大的力气。这里就用一段虚拟数据简单总结一下JSON的处理与使用。
P.S. 本文只会介绍比较朴素的代码实现方式。相信很多人在包管理界面都见过JSON的专用包,但那是个第三方包。这里引申一点个人看法,如果是自己在家随便玩玩,只要是大佬开放的包,能实现功能,怎么搞都可以;但如果是在工作中,第三方的包还是慎用,版权、安全、后期维护等等都有可能是一时便利的代价,这些以后有空细说。
实现
下面是一段瞎编的JOSN,其中包含了JSON对象,JSON键值对和JOSN数组。我们假设这是四个公司的信息,把它赋值给名叫strCompanies的String变量:
{"N":{"Email": "n@n.com","Office": ["BJ","QD","TJ","SY"]},"EW":{"Email": "ew@ew.com","Office": ["SH","HZ","CD","NJ","WH"]},"S":{"Email": "s@s.com","Office": ["GZ","SZ","XM","DC"]},"H":{"Email": "h@h.com","Office": ["HK"]}}
为了能更有效率的解析JSON,第一步当然是反序列化。我们新建一个变量jobjTest,变量类型的全称是Newtonsoft.Json.Linq.JObject,把以下语句赋值给jobjTest:
Newtonsoft.Json.Linq.JObject.Parse(strJSON)
- 要获取对象的名字,新建一个String的IEnumerable集合,叫它arrCompanyNames,然后赋值为:
from item in jobjTest.Properties select item.Name
- 有了每个对象的名字,获取第一个对象的Email的值,新建一个String,叫strEmail,赋值:
jobjTest(arrCompanyNames(0))("Email").toString
- 每个对象的Office是一个JSON数组,假设需要获取第一个对象的全部Office,新建一个Newtonsoft.Json.Linq.Jarray,赋值:
jobjTest(arrCompanyNames(0))("Office").ToObject(Of Newtonsoft.Json.Linq.JArray)