C#、JavaScript、VBScript、Delphi解析JSON数据源码
  bHlya0zM3Kzo 2023年12月22日 35 0


C#、JavaScript、VBScript、Delphi解析JSON数据源码_解析

本示例使用设备: 

C#解析JSON数据 

string dispstr = "{" + getChinesecode("扫码") + ":}" + data; //显示信息,注意中文汉字一定要转换为设备能显示的编码,其它字母数字符号不需要转换,{}内的信息反白显示       
string ChineseVoice = getChinesecode("扫码")  + data;

string jsonText = "{\"Response\":\"json\",\"infotype\":\"1\"";      //固定前缀,我们的设备以此来检索返回信息,表示 驱动设备显示和响声
jsonText = jsonText + ",\"info\":\"" + info + "\"";                 //提交的信息序号,一定要对应
jsonText = jsonText + ",\"disp\":\"" + dispstr + "\\n\\n\"";        //显示文字,注意中文汉字一定要转换为设备能显示的编码,其它字母数字符号不需要转换,{}内的信息反白显示
jsonText = jsonText + ",\"dispdelay\":\"20\"";                      //显示时长20秒
jsonText = jsonText + ",\"beeptype\":\"1\"";                        //蜂鸣器发声种类,取值范围0-12
jsonText = jsonText + ",\"voicetype\":\"" + ChineseVoice + "\"";    //播报的TTS语音
jsonText = jsonText + ",\"k1delay\":\"20\"";                        //第1继电器开启延时单位,每1个单位延时25mm,20*25表示500mm,取值为0表示关闭继电器
jsonText = jsonText + ",\"k2delay\":\"20\"}";                       //第2继电器开启延时单位,以,分隔,总计可以控制8个继电器
       


//方法一
string disp=getjsonval(jsonText,"disp");
public static string getjsonval(string totalstr, string namestr)    //JSON解析
{
     string valustr = "";
     totalstr = totalstr.Replace("{", "");
     totalstr = totalstr.Replace("}", "");
     totalstr=totalstr.Replace ("\"","");
     string[] dataArray = totalstr.Split(new char[2] { ',', ',' });
     if (dataArray.GetUpperBound(0) > 0)
     {
         for (int i = 0; i < dataArray.Length; i++)
         {
             string[] dataArray2 = dataArray[i].Split(new char[2] { ':', ':' });
             if (dataArray2[0] == namestr)
             {
                 valustr = dataArray2[1];
                 break;
             }                      
         }
     }
     return valustr;
}


//方法二
using Newtonsoft.Json;


RootObject rb = JsonConvert.DeserializeObject<RootObject>(jsonText);
info = rb.info;                     //接收到的数据包号,需回应该包号
jihao = rb.jihao;                   //设备机号(可自编)
cardtype = rb.cardtype;             //卡类型,1为ID卡,2为HID卡,3为T5557卡,4为EM4305卡,5为IC卡,6为二代证,7为15693卡,8为hid iclass卡
scantype = rb.scantype;             //扫描枪信息类型
heartbeattype = rb.heartbeattype;   //心跳包标识
card = rb.card;                     //接收到的原始16进制卡号,可根据需要自行转换成其他卡号
blockdata = rb.data;                //扇区内容 或 扫码信息  
input = rb.input;                   //输入标志
output = rb.output;                 //输出标志
rand = rb.rand;                     //设备的随机数
dn = rb.dn;                         //设备硬件序列号,出厂时已固化,全球唯一
status = rb.status;                 //读卡状态,如密码认证失败为12


public class RootObject
{
      public string info { get; set; }
      public string jihao { get; set; }
      public string cardtype { get; set; }
      public string scantype { get; set; }
      public string heartbeattype { get; set; }
      public string card { get; set; }
      public string data { get; set; }
      public string status { get; set; }
      public string input { get; set; }
      public string output { get; set; }
      public string rand { get; set; }
      public string dn { get; set; }                        
}

 VBScript解析JSON

poststrlen = Request.TotalBytes '获取字节数
If poststrlen > 0 Then
    poststr = bin2str(Request.BinaryRead(poststrlen))
    info = getpostval(poststr, "info") '信息序号
    jihao = getpostval(poststr, "jihao") '设备机号(可自编)
    cardtype = getpostval(poststr, "cardtype") '卡类型有IC、ID、ISO15693等
	heartbeattype = getpostval(poststr, "heartbeattype") '心跳信息类型
	scantype = getpostval(poststr, "scantype") '扫描枪信息类型
    card = getpostval(poststr, "card") '卡序列号
    data = getpostval(poststr, "data") '扇区内容
    dn = getpostval(poststr, "dn") '设备硬件序列号,出厂时已固化,全球唯一
    Status = getpostval(poststr, "status") '状态,如密码认证失败为12
End if

Function bin2str(bindata)
    Dim rsStream, strls
    Set rsStream = Server.CreateObject("ADODB.Stream")
    rsStream.Type = 2
    rsStream.Open
    rsStream.WriteText bindata
    rsStream.Position = 0
    rsStream.Charset = "utf-8" '或GBK
    rsStream.Position = 2
    strls = rsStream.ReadText
    rsStream.Close
    Set rsStream = Nothing
    bin2str = strls
End Function

Function getjsonval(totalstr, namestr)
    Dim p1, p2, k, n, strls
    n = Len(totalstr)
    If n < 5 Then
        getjsonval = ""
        Exit Function
    End If
    If (Left(totalstr, 1) <> "{") Or (Right(totalstr, 1) <> "}") Then
        getjsonval = ""
        Exit Function
    End If
    strls = "," + Mid(totalstr, 2, n - 2) + ","
    k = Len(namestr) + 4
    p1 = InStr(strls, ",""" + namestr + """:")
    If p1 < 1 Then
        getjsonval = ""
        Exit Function
    End If
    p2 = InStr(p1 + k, strls, ",")
    If p2 > (p1 + k) Then
        getjsonval = Mid(strls, p1 + k, p2 - (p1 + k))
        If (Left(getjsonval, 1) <> """") Or (Right(getjsonval, 1) <> """") Then
            getjsonval = ""
            Exit Function
        End If
        n = Len(getjsonval)
        If n < 3 Then
            getjsonval = ""
            Exit Function
        End If
        getjsonval = Mid(getjsonval, 2, n - 2)
    Else
        getjsonval = ""
    End If
End Function

JavaScript解析JSON 

function bintostr(bindata) {
        var rsStream = new ActiveXObject("ADODB.Stream");
        rsStream.Type = 2;
        rsStream.Open();
        rsStream.WriteText(bindata);
        rsStream.Position = 0;
        rsStream.Charset = "utf-8";  //或GBK
        rsStream.Position = 2;
        strls = rsStream.ReadText;
        rsStream.Close();
        rsStream = null;
        return strls;
}

var poststrlen = Request.TotalBytes;
if (poststrlen > 0) {                                    //获取JSON方式提交的数据
            jsonstr = bintostr(Request.BinaryRead(poststrlen));  //解析JSON参数
            var jsontext = eval("(" + jsonstr + ")");
            var info = jsontext.info;                   //信息序号,回应时要带入此序号
            var jihao = jsontext.jihao;                 //设备机号(可自编)
            var cardtype = jsontext.cardtype;           //卡类型 及 卡状态
            var heartbeattype = jsontext.heartbeattype; //心跳信息类型
            var scantype = jsontext.scantype;           //扫码标识
            var card = jsontext.card;                   //16进制的卡序号
            var data = jsontext.data;                   //扇区内容 或 扫码数据
            var input = jsontext.input;                 //输入标识
            var output = jsontext.output;               //输出标识
            var rand = jsontext.rand;                   //设备随机数
            var dn = jsontext.dn;                       //设备硬件序列号,出厂时已固化,全球唯一
            var status = jsontext.status;               //读卡状态,如密码认证失败为12
}

Delphi解析JSON

var
  Image1:TImage;
  aJson: ISuperObject;
begin
  aJson := so(lvString);
  if aJson['alipay_trade_pay_response'] <> nil then
  begin
    if aJson['alipay_trade_pay_response.msg'].AsString = 'Success' then
    begin
         if StrToFloat(ajson['alipay_trade_pay_response.buyer_pay_amount'].AsString)>0 then
         begin
            Result:=0;
            DealInf:='支付成功;帐号:'+ajson['alipay_trade_pay_response.buyer_logon_id'].AsString+';金额:'+ajson['alipay_trade_pay_response.buyer_pay_amount'].AsString+'元';
         end
         else
         begin
            Result:=1;
            DealInf:='正在支付请稍候...';
         end;
    end;
 end;
end;

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月22日 0

暂无评论

推荐阅读
bHlya0zM3Kzo