本示例使用设备:
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;