c# 通过访问URL,获取并解析远程服务端返回的复杂Json数据
2013-10-17 12:00
821 查看
最近在做一个业务需求,需要通过速卖通提供的API,抓取速卖通订单数据到本地数据库。
速卖通官方提供了很多API及测试工具,抓取数据功能的实现基本上不存在问题,比较麻烦的是,ALi服务端传回来的订单列表是Json格式的。解析起来还是相当头疼的。
在此分享出本人的解析方法,个人感觉的比较愚笨的处理方式,希望各位大神给出更好的建议。
ALi提交的URL请求格式为:http://gw.api.alibaba.com:80/openapi/param2/1/aliexpress.open/api.findOrderListQuery/YOUR_APPKEY?page=1&pageSize=50&createDateStart=10%2F15%2F2013&createDateEnd=10%2F16%2F2013&orderStatus=WAIT_SELLER_SEND_GOODS&access_token=01ecdeb3-a577-409d-9e6e-137031d8e6e3&_aop_signature=AFFB2B414CAA7D62B12E8C1E04D83DAC00B4EC80
其中参数内容为:
page=1 从第一页开始获取
pageSize=50 每页显示50条数据(ALi最大每页只能显示50条数据)
createDateStart=10%2F15%2F2013 抓取数据开始时间 10/15/2013
createDateEnd=10%2F16%2F2013 抓取数据结束时间 10/16/2013
orderStatus=WAIT_SELLER_SEND_GOODS 抓取订单状态
access_token 授权令牌
&_aop_signature 授权签名
通过URL获取回来的Json格式如下:
View Code
个人感觉这种解析方式还是比较繁琐的。不知园子里的大牛们,是否能提供一种比较简便的解析Json的方式。
速卖通官方提供了很多API及测试工具,抓取数据功能的实现基本上不存在问题,比较麻烦的是,ALi服务端传回来的订单列表是Json格式的。解析起来还是相当头疼的。
在此分享出本人的解析方法,个人感觉的比较愚笨的处理方式,希望各位大神给出更好的建议。
ALi提交的URL请求格式为:http://gw.api.alibaba.com:80/openapi/param2/1/aliexpress.open/api.findOrderListQuery/YOUR_APPKEY?page=1&pageSize=50&createDateStart=10%2F15%2F2013&createDateEnd=10%2F16%2F2013&orderStatus=WAIT_SELLER_SEND_GOODS&access_token=01ecdeb3-a577-409d-9e6e-137031d8e6e3&_aop_signature=AFFB2B414CAA7D62B12E8C1E04D83DAC00B4EC80
其中参数内容为:
page=1 从第一页开始获取
pageSize=50 每页显示50条数据(ALi最大每页只能显示50条数据)
createDateStart=10%2F15%2F2013 抓取数据开始时间 10/15/2013
createDateEnd=10%2F16%2F2013 抓取数据结束时间 10/16/2013
orderStatus=WAIT_SELLER_SEND_GOODS 抓取订单状态
access_token 授权令牌
&_aop_signature 授权签名
通过URL获取回来的Json格式如下:
/// <summary> /// 获取速卖通订单列表Json /// </summary> public int GetAliExpressOrdersJson(string page,string pageSize,string accessToken) { string result = ""; //总记录 int totalItem = -1; //获取订单时间,前两天 DateTime startTime = DateTime.Now.AddDays(-2); //转换获取订单时间 string dateStart = startTime.Month.ToString(CultureInfo.InvariantCulture) + "%2F" + startTime.Day.ToString(CultureInfo.InvariantCulture) + "%2F" + startTime.Year.ToString(CultureInfo.InvariantCulture); //获取订单前一天 DateTime endTime = DateTime.Now.AddDays(-1); //转换获取订单时间 string dateEnd = endTime.Month.ToString(CultureInfo.InvariantCulture) + "%2F" + endTime.Day.ToString(CultureInfo.InvariantCulture) + "%2F" + endTime.Year.ToString(CultureInfo.InvariantCulture); string AliOrderStatus = ConfigurationManager.AppSettings["OrderStatus"]; //拼接请求的URL string urlPath = ConfigurationManager.AppSettings["FindOrderListQuery"] + "page=" + page + "&pageSize=" + pageSize + "&createDateStart=" + dateStart + "&createDateEnd=" + dateEnd + "&orderStatus=" + AliOrderStatus + "&access_token=" + accessToken; Logger.WriteLog("获取从" + startTime.ToShortDateString() + "到" + endTime.ToShortDateString() + "之间订单的URL为:" + urlPath + "。"); Console.WriteLine("获取从" + startTime.ToShortDateString() + "到" + endTime.ToShortDateString() + "之间订单的URL为:" + urlPath + "。"); WebRequest req = WebRequest.Create(urlPath); req.Method = "GET"; WebResponse res = req.GetResponse(); Stream receiveStream = res.GetResponseStream(); Encoding encode = Encoding.GetEncoding("utf-8"); StreamReader sr = new StreamReader(receiveStream, encode); char[] readbuffer = new char[20480]; int n = sr.Read(readbuffer, 0, 20480); while (n > 0) { string str = new string(readbuffer, 0, n); result += str; n = sr.Read(readbuffer, 0, 20480); } JavaScriptSerializer JSS = new JavaScriptSerializer(); object obj = JSS.DeserializeObject(result); //获取Json对象,转换为键值对列表 Dictionary<string, object> datajson = (Dictionary<string, object>)obj; //创建订单列表及订单明细列表 var aliExpressOrderList = new List<AliExpressOrders>(); var aliExpressOrderDetailList = new List<AliExpressOrderDetails>(); //解析键值对数据 #region foreach (KeyValuePair<string, object> item in datajson) { if (item.Key == "totalItem") { //订单总数 totalItem = Convert.ToInt32(item.Value.ToString()); Logger.WriteLog("获取从" + startTime.ToShortDateString() + "到" + endTime.ToShortDateString() + "之间订单的总数为:" + totalItem + "。"); Console.WriteLine("获取从" + startTime.ToShortDateString() + "到" + endTime.ToShortDateString() + "之间订单的总数为:" + totalItem + "。"); } else { //获取orderList对象 object[] orderList = (object[])item.Value; foreach (Dictionary<string, object> orders in orderList) { var aliExpressOrder = new AliExpressOrders(); #region //获取每一个Order foreach (KeyValuePair<string, object> order in orders) { if (order.Key == "productList") { object[] productList = (object[])order.Value; //获取子订单列表 foreach (Dictionary<string, object> products in productList) { var aliExpressOderDetail = new AliExpressOrderDetails(); //获取每一个子订单 foreach (KeyValuePair<string, object> product in products) { if (product.Key == "childId") { string childId = product.Value.ToString(); aliExpressOderDetail.childId = product.Value.ToString(); } if (product.Key == "goodsPrepareTime") { string goodsPrepareTime = product.Value.ToString(); aliExpressOderDetail.goodsPrepareTime = product.Value.ToString(); } if (product.Key == "logisticsAmount") { Dictionary<string, object> logisticsAmountList = (Dictionary<string, object>)product.Value; foreach (var logisticsAmounts in logisticsAmountList) { if (logisticsAmounts.Key == "amount") { string amount = logisticsAmounts.Value.ToString(); aliExpressOderDetail.logisticsAmount = Convert.ToDecimal(logisticsAmounts.Value.ToString()); } } } if (product.Key == "memo") { string memo = product.Value.ToString(); aliExpressOderDetail.memo = product.Value.ToString(); } if (product.Key == "totalProductAmount") { Dictionary<string, object> totalProductAmountList = (Dictionary<string, object>)product.Value; foreach (var totalProductAmounts in totalProductAmountList) { if (totalProductAmounts.Key == "amount") { string amount = totalProductAmounts.Value.ToString(); aliExpressOderDetail.totalProductAmount = Convert.ToDecimal(totalProductAmounts.Value.ToString()); } } } if (product.Key == "freightCommitDay") { string freightCommitDay = product.Value.ToString(); aliExpressOderDetail.freightCommitDay = product.Value.ToString(); } if (product.Key == "canSubmitIssue") { string canSubmitIssue = product.Value.ToString(); if (canSubmitIssue == "true") aliExpressOderDetail.canSubmitIssue = true; aliExpressOderDetail.canSubmitIssue = false; } if (product.Key == "productUnit") { string productUnit = product.Value.ToString(); aliExpressOderDetail.productUnit = product.Value.ToString(); } if (product.Key == "logisticsType") { string logisticsType = product.Value.ToString(); aliExpressOderDetail.logisticsType = product.Value.ToString(); } if (product.Key == "issueStatus") { string issueStatus = product.Value.ToString(); aliExpressOderDetail.issueStatus = product.Value.ToString(); } if (product.Key == "orderId") { string orderId = product.Value.ToString(); aliExpressOderDetail.OrderID = product.Value.ToString(); } if (product.Key == "logisticsServiceName") { string logisticsServiceName = product.Value.ToString(); aliExpressOderDetail.logisticsServiceName = product.Value.ToString(); } if (product.Key == "sonOrderStatus") { string sonOrderStatus = product.Value.ToString(); aliExpressOderDetail.sonOrderStatus = product.Value.ToString(); } if (product.Key == "productSnapUrl") { string productSnapUrl = product.Value.ToString(); aliExpressOderDetail.productSnapUrl = product.Value.ToString(); } if (product.Key == "moneyBack3x") { string moneyBack3x = product.Value.ToString(); if (moneyBack3x == "true") aliExpressOderDetail.moneyBack3x = true; aliExpressOderDetail.moneyBack3x = false; } if (product.Key == "skuCode") { string skuCode = product.Value.ToString(); aliExpressOderDetail.skuCode = product.Value.ToString(); } if (product.Key == "productId") { string productId = product.Value.ToString(); aliExpressOderDetail.productId = product.Value.ToString(); } if (product.Key == "productCount") { string productCount = product.Value.ToString(); aliExpressOderDetail.productCount = Convert.ToInt32(product.Value.ToString()); } if (product.Key == "deliveryTime") { string deliveryTime = product.Value.ToString(); aliExpressOderDetail.deliveryTime = product.Value.ToString(); } if (product.Key == "productUnitPrice") { Dictionary<string, object> productUnitPriceList = (Dictionary<string, object>)product.Value; foreach (var productUnitPrices in productUnitPriceList) { if (productUnitPrices.Key == "amount") { string amount = productUnitPrices.Value.ToString(); aliExpressOderDetail.productUnitPrice = Convert.ToDecimal(productUnitPrices.Value.ToString()); } } } if (product.Key == "productImgUrl") { string productImgUrl = product.Value.ToString(); aliExpressOderDetail.productImgUrl = product.Value.ToString(); } if (product.Key == "showStatus") { string showStatus = product.Value.ToString(); } if (product.Key == "productName") { string productName = product.Value.ToString(); aliExpressOderDetail.productName = product.Value.ToString(); } } aliExpressOrderDetailList.Add(aliExpressOderDetail); } } if (order.Key == "issueStatus") { string issueStatus = order.Value.ToString(); aliExpressOrder.issueStatus = order.Value.ToString(); } if (order.Key == "frozenStatus") { string frozenStatus = order.Value.ToString(); aliExpressOrder.frozenStatus = order.Value.ToString(); } if (order.Key == "buyerLoginId") { string buyerLoginId = order.Value.ToString(); aliExpressOrder.buyerLoginId = order.Value.ToString(); } if (order.Key == "sellerSignerFullname") { string sellerSignerFullname = order.Value.ToString(); aliExpressOrder.sellerSignerFullname = order.Value.ToString(); } if (order.Key == "orderId") { string orderId = order.Value.ToString(); aliExpressOrder.orderId = order.Value.ToString(); } if (order.Key == "payAmount") { Dictionary<string, object> payAmountList = (Dictionary<string, object>)order.Value; foreach (var payAmounts in payAmountList) { if (payAmounts.Key == "amount") { string amount = payAmounts.Value.ToString(); aliExpressOrder.payAmount = Convert.ToDecimal(payAmounts.Value.ToString()); } } } if (order.Key == "gmtCreate") { string gmtCreate = order.Value.ToString(); aliExpressOrder.gmtCreate = order.Value.ToString(); } if (order.Key == "orderStatus") { string orderStatus = order.Value.ToString(); aliExpressOrder.orderStatus = order.Value.ToString(); } if (order.Key == "buyerSignerFullname") { string buyerSignerFullname = order.Value.ToString(); aliExpressOrder.buyerSignerFullname = order.Value.ToString(); } if (order.Key == "timeoutLeftTime") { string timeoutLeftTime = order.Value.ToString(); aliExpressOrder.timeoutLeftTime = order.Value.ToString(); } if (order.Key == "fundStatus") { string fundStatus = order.Value.ToString(); aliExpressOrder.fundStatus = order.Value.ToString(); } if (order.Key == "bizType") { string bizType = order.Value.ToString(); aliExpressOrder.bizType = order.Value.ToString(); } } #endregion aliExpressOrderList.Add(aliExpressOrder); } } new AliExpressService().AddAliExpressOdersAndDetails(aliExpressOrderList, aliExpressOrderDetailList); } #endregion foreach (var orderse in aliExpressOrderList) { GetAliExpressOrdersDetailJson(orderse.orderId, accessToken); } return totalItem; }
View Code
个人感觉这种解析方式还是比较繁琐的。不知园子里的大牛们,是否能提供一种比较简便的解析Json的方式。
相关文章推荐
- Java 通过HttpURLConnection Post方式提交json,并从服务端返回json数据
- asp通过json调用webservice接口,并获取返回的xml数据及解析
- Java 通过HttpURLConnection Post方式提交json,并从服务端返回json数据
- C#windowForm 从php函数返回的Url获取到json并解析,下载文件
- Java 通过HttpURLConnection Post方式提交json,并从服务端返回json数据
- JSON PHP中返回JSON数据(多个JSON通过一个大的数组组合成一个JSON字符串),在客户端解析JSON数据减轻服务端压力
- 微信相关 -- 可以通过调用下面的方法 请求对应的url 获取微信服务器返回的json数据
- C#通过WebService获取JSON数据并快速解析(百度地图坐标转换API为例)
- Android访问网络系列之--服务端返回XML或JSON格式数据,Android 进行解析并显示
- Android访问网络系列之--服务端返回XML或JSON格式数据,Android 进行解析并显示
- 怎么获取pm2.5数据----pm2.5 的获取 java 通过url获取后,得到json 格式,在解析json
- Java Json解析,Java Web Json解析,Java Web服务端获取Json数据,客户端通过HTTP获取Json数据
- 通过访问第三方URL返回json数据
- java通过url调用远程接口返回json数据,有用户名和密码验证
- .net通过url访问服务器获取服务器返回数据
- android:通过url向网络端获取json格式数据并解析显示
- Java 通过HttpURLConnection Post方式提交json,并从服务端返回json数据
- Java Json解析,Java Web Json解析,Java Web服务端获取Json数据,客户端通过HTTP获取Json数据
- Java数据接口编写简单例子,Java Json解析,服务端接口输出Json数据,客户端通过HTTP获取接口Json数据
- 如何通过URL获取天气PM2.5的数据,返回json