C# Newtonsoft.Json解析json字符串处理 - JToken 用法

//*调用服务器API(获取可以处理的文件)
//1、使用JSON通信协议(调用[待化验任务API])
String retData = null;
{
    JToken json = JToken.Parse(Global.jsonTemplate);
    json["actionName"] = "待化验任务API";
    json["action"] = "awaitLaboratory";
    json["paramInfo"]["kindId"] = Global.ExeCodeColData;//种类编码
    //json["paramInfo"]["lab_orgdm"] = Global.ExeCodeColData;//设备机构代码
    String jsonStr = JsonConvert.SerializeObject(json);
    jsonStr = HttpUtility.UrlEncode(jsonStr);//编码后发送字符串,否则中文会出现乱码
    retData = HttpUtil.HttpPost(Global.ServerCallPath, "json=" + jsonStr);//调用服务器接口
}

//判断是否返回了数据
if (!String.IsNullOrEmpty(retData) && !String.IsNullOrEmpty(retData.Trim()))
{

    //格式化数据
    retData = retData.Trim();
    //转换JSON对象
    JToken retDataJson = JToken.Parse(retData);

    ////---模拟数据开始---
    //JArray jsonArrTemp = JArray.Parse("[{tmuid:‘aaa123‘,fileName:‘aaa123_ypmc_20171117153900.png‘},{tmuid:‘bbb123‘,fileName:‘bbb123_ypmc_20171117153900.png‘}]");
    //retDataJson["data"] = jsonArrTemp;
    //retDataJson["bReturn"] = "true";
    //retDataJson["sReturn"] = "获取数据成功![待化验任务API(awaitLaboratory)]";
    ////---模拟数据结束---

    //判断(调用[待化验任务API])返回的结果是否成功
    if (retDataJson["bReturn"].ToString().ToLower().Trim() == "true")
    {

        //2、调用化验任务API获得任务编号,去匹配文件名,如果没匹配到,继续轮询化验结果目录。
        //取出有效数据
        JToken retDataJson_Data = retDataJson["data"];
        foreach (JToken item in retDataJson_Data)//遍历数组
        {
            //获取服务器上的数据
            String tmuid = item["tmuid"].ToString();
            String serFileName = item["fileName"].ToString().Trim();//获取服务器提供的文件名
            bool bStatus = false;//false:默认未找到此任务编号对应的文件
            string strStatus = "";

            //遍历本地文件名
            foreach (string itemFileName in files)
            {
                String localFileName = Path.GetFileName(itemFileName);//本地文件名

                //不使用服务端的文件扩展名,将文件扩展名与本地文件同步
                serFileName = Path.GetExtension(serFileName) != "" ? serFileName.Replace(Path.GetExtension(serFileName), Path.GetExtension(localFileName)) : serFileName + Path.GetExtension(localFileName);

                //判断文件如果不存在,则跳出
                if (!File.Exists(itemFileName)) continue;

                //判断服务器返回的TMUID,匹配文件名
                if (itemFileName.ToLower().IndexOf(tmuid.ToLower()) > 0)
                {
                    //*调用服务器API(上传文件)
                    //3、如果匹配成功后上传pdf文件,同时修改文件名(任务id+样品名称+时间),(调用[接收解析API])获得返回结果,如果成功提示成功并且把文件移动到成功文件夹,如果失败提示失败,把文件移动到失败文件夹
                    String retData_UpLoadFile = null;
                    {
                        JToken json = JToken.Parse(Global.jsonTemplate);
                        json["actionName"] = "接收解析API(上传文件API)";
                        json["action"] = "labUpLoadFile";
                        json["paramInfo"]["kindId"] = Global.ExeCodeColData;//种类编码
                        json["paramInfo"]["taskId"] = tmuid;//任务编码
                        json["paramInfo"]["localFileName"] = localFileName;//本地文件名
                        json["paramInfo"]["serFileName"] = serFileName;//服务端传来的文件名
                        json["paramInfo"]["suffix"] = Path.GetExtension(serFileName).Replace(".", "");//本地文件扩展名
                        //json["paramInfo"]["lab_orgdm"] = Global.ExeCodeColData;//设备机构代码
                        String jsonStr = JsonConvert.SerializeObject(json);
                        jsonStr = HttpUtility.UrlEncode(jsonStr);//编码后发送字符串,否则中文会出现乱码
                        retData_UpLoadFile = HttpUtil.UploadRequest(Global.ServerCallPath + "?json=" + jsonStr, itemFileName);//调用服务器接口(上传文件到服务器)
                    }

                    //判断是否返回了数据
                    if (!String.IsNullOrEmpty(retData_UpLoadFile) && !String.IsNullOrEmpty(retData_UpLoadFile.Trim()))
                    {
                        //格式化数据
                        retData_UpLoadFile = retData_UpLoadFile.Trim();
                        //转换JSON对象
                        JToken retData_UpLoadFileJson = JToken.Parse(retData_UpLoadFile);

                        //*4.保存成功和失败文件的目录要每天创建当天的文件夹
                        string srcDirFile = itemFileName;//源目录文件
                        string destDirFileSucceed = Global.PollingDirPathSucceed + "\\" + time_rq + "\\" + serFileName;//目的目录文件(成功)
                        string destDirFileFailure = Global.PollingDirPathFailure + "\\" + time_rq + "\\" + serFileName;//目的目录文件(失败)

                        //判断(调用[接收解析API(labUpLoadFile)])返回结果是否成功
                        if (retData_UpLoadFileJson["bReturn"].ToString().ToLower().Trim() == "true")
                        {
                            //调用成功:把文件移动到成功文件夹,同时修改文件名(任务id+样品名称+时间)

                            //移动文件(自动创建目录)
                            if (FileUtil.moveFile(srcDirFile, destDirFileSucceed, true))
                            {
                                //打印日志(移动文件成功)
                                strStatus = time + "  -  " + "成功" + "  -  " + localFileName + "  to  " + serFileName + "  -  " + retData_UpLoadFileJson["sReturn"].ToString();
                                //LogManager.WriteLog(LogFile.Trace, "函数timerMain_Tick:" + strStatus);
                            }
                            else
                            {
                                //打印日志(移动文件失败)
                                strStatus = time + "  -  " + "失败" + "  -  " + localFileName + "  to  " + serFileName + " - 移动文件失败!";
                                //LogManager.WriteLog(LogFile.Trace, "函数timerMain_Tick:" + strStatus);
                            }
                        }
                        else
                        {
                            //调用失败:把文件移动到失败文件夹
                            //调用[接收解析API(labUpLoadFile)]API失败

                            //打印日志
                            strStatus = time + "  -  " + "失败" + "  -  " + localFileName + "  to  " + serFileName + "  -  " + retData_UpLoadFileJson["sReturn"].ToString();

                            //移动文件(自动创建目录)
                            if (!FileUtil.moveFile(srcDirFile, destDirFileFailure, true))
                            {
                                //移动文件失败
                                strStatus += " - 移动文件失败!";
                            }

                            //LogManager.WriteLog(LogFile.Trace, "函数timerMain_Tick:" + strStatus);
                        }
                    }
                    else
                    {
                        //调用[接收解析API(labUpLoadFile)]API失败
                        //打印日志
                        strStatus = time + "  -  " + "失败" + "  -  " + localFileName + "  to  " + serFileName + "  -  调用[接收解析API(labUpLoadFile)]API失败!返回的数据为空!!";
                        //LogManager.WriteLog(LogFile.Trace, "函数timerMain_Tick:" + strStatus );
                    }

                    //找到此任务编号对应的文件(赋值成功标识)
                    LogManager.WriteLog(LogFile.Trace, "函数timerMain_Tick:" + strStatus);
                    bStatus = true;
                    break;
                }
            }

            //判断是否找到此任务编号对应的文件
            if (!bStatus)
            {
                strStatus = time + "  -  " + "失败" + "  -  未找到此任务编号对应的文件:" + tmuid + "  to  " + serFileName;
                LogManager.WriteLog(LogFile.Trace, "函数timerMain_Tick:" + strStatus);
            }

            //加入列表
            listFiles.Items.Insert(0, strStatus);

        }

    }
    else
    {
        //调用[待化验任务API(awaitLaboratory)]API失败
        LogManager.WriteLog(LogFile.Trace, "函数timerMain_Tick:" + retDataJson["sReturn"].ToString());
    }
}
else
{
    //调用[待化验任务API(awaitLaboratory)]API失败
    LogManager.WriteLog(LogFile.Trace, "函数timerMain_Tick:调用[待化验任务API(awaitLaboratory)]API失败!返回的数据为空!!");
}

原文地址:https://www.cnblogs.com/zouhao/p/11420145.html

时间: 2024-08-26 10:46:10

C# Newtonsoft.Json解析json字符串处理 - JToken 用法的相关文章

用 org.json 解析JSON

1.下载 java-json.jar 包 介绍:http://www.json.org/ 下载: https://github.com/stleary/JSON-java/releases https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.json%22%20AND%20a%3A%22json%22 附件:java-json.jar.zip 附件:json-20160810-javadoc.jar 2.解析 JSON  代码如下: 1

C# Newtonsoft.Json解析json字符串处理(最清晰易懂的方法)

需求: 假设有如下json字符串: { "companyID": "15", "employees": [ { "firstName": "Bill", "lastName": "Gates" }, { "firstName": "George", "lastName": "Bush" }

Json 解析Json

1.把LitJson导入到项目里面; 2.建一个下面的脚本,不挂在游戏对象上; 3.新建下面一个脚本,挂在相机上. 1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 public class AnalyzeJsonTest : MonoBehaviour 6 { 7 string sss; 8 void Start () 9 { 10 sss = 11 "{ 'desc

通过Json和Gson,快速生成和解析json字符串

1,首先我们要先明白json与gson有什么区别 其实他们是完全不同的概念: json是一种数据格式,便于数据传输,存储,交换. gson则是一种组件库,就是通过Gson我们可以把java中的对象(gson.toJson()),转换成Json字符串,当然反过来也是可以的(gson.fromJson); 2,代码 首先我们需要JSon和Gson这两个jar包 package com.json.dome; import java.util.ArrayList;import java.util.Lis

Android 之json解析2

JSON(JavaScript Object Notation) 定义:字符串 键值对 解析方法有JSON,谷歌GSON,阿里巴巴FastJSON 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性. 业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换. JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. Json建构于两种结构: 1.“名称/值”对的集合(A collection of name

使用JSONObject生成和解析json

使用JSONObject生成和解析json 1. json数据类型 类型 描述 Number 数字型 String 字符串型 Boolean 布尔型 Array 数组 Object 对象 null 空值 (1)json中不区分整数.小数等类型,而统一使用Number来存储数字. (2)Array表示数组,以中括号"[]"括起来,元素之间以逗号分隔,元素可以为任意类型. (3)Object表示对象,类似于C语言中的结构体,以花括号"{}"括起来,其元素要求为键值对,k

Android数据解析-JSON解析

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集. JSON采用完全独立于语言的文本格式,web开发中这个哥们时常出现在你的程序中,你还不得不解析,一般说到JSON,都会不由自主的对比一下它的前辈XML,XML从设计之初到现在已经有十年的光景,在有些方面的作用已经超出其当时设计XML的初衷,WebService是XML的主要

XML和JSON解析笔记

XML -> 1. sax  2.Dom JSON解析  在IOS5.0以后提供NSJSON  在5.0之前用SBJSON和JSONKit 本讲内容 1.解析的基本概念 2.XML数据结构 3.JSON数据结构 4.两种数据结构的优缺点 解析: 从事先规定好的格式中提取数据 解析的前提: 提前约定好格式, 数据提供方按照格式提供数据,数据获取方则按照格式获取数据 XML基本概念 可扩展标记语言 功能: 数据交换 Web服务  内容管理 XML数据结构的语法 一对尖括号代表一个节点,或者标签 只有

安卓中解析json数据

一.概述 JSON是JavaScript Object Notation的简称,起源于js(javascript)它是一种轻量级的数据交换格式,JSON不仅在js中广泛使用,同时还在其他领域得到广泛使用,如c,c++,java,Php,swift等等,成为了一种通用的理想数据交换格式,它有两种数据结构,分别是对象,数组,它形式上有花括号{}和中括号[]嵌套,{}中的是代表对象,[]中的为数组,即对象中有数组,数组中又有对象,而且以及键/值对出现. json语法: 数据在键值对中 数据有逗号分离