串口数据的实时解析方法、解析装置和充电系统与流程

文档序号:33713051发布日期:2023-04-01 01:01阅读:105来源:国知局
串口数据的实时解析方法、解析装置和充电系统与流程

1.本技术涉及串口数据解析技术领域,具体而言,涉及一种串口数据的实时解析方法、解析装置、计算机可读存储介质和充电系统。


背景技术:

2.截至2022年6月底,全国机动车保有量达4.06亿辆,其中汽车3.10亿辆,新能源汽车1001万辆;机动车驾驶人4.92亿人,其中汽车驾驶人4.54亿人。2022年上半年全国新注册登记机动车1657万辆,新领证驾驶人1103万人。
3.与新能源车相配的,是需要有足够的新能源充电桩来为之提供充能支撑。在此背景下,ocpp(开放充电协议)便应运而生,其目的在于解决充电桩和充电管理系统间的互联互通。
4.为了支撑软件开发阶段,对ocpp协议的放电流程做自动化的测试,则必须有一套能够实时解析ocpp信息的工具。且作为对桩的开发,需有能基于串口数据来做外部监控及解析实时的放电数据,以做自动化测试。
5.当前并没有一种方法能够基于串口去解析ocpp消息的json消息。
6.当前的对于json数据的解析,多为静态的解析,没有一个实时的解析系统
7.串口输出的数据格式为非完整json结构体输出,而是分行输出。当前没有方法能解析这种连续的且分行输出的json数据。
8.为了实现本地自动化的监控串口json数据,务必有一套能实时解析此数据的方法,以实现数据实时分析的自动化进程,并为本地的自动化测试进程提供服务。
9.在背景技术部分中公开的以上信息只是用来加强对本文所描述技术的背景技术的理解,因此,背景技术中可能包含某些信息,这些信息对于本领域技术人员来说并未形成在本国已知的现有技术。


技术实现要素:

10.本技术的主要目的在于提供一种串口数据的实时解析方法、解析装置、计算机可读存储介质和充电系统,以解决现有技术中无法实时逐行解析串口输出的json数据的问题。
11.根据本发明实施例的一个方面,提供了一种串口数据的实时解析方法,包括:获取步骤,获取当前的json行数据,所述json行数据为串口输出的一行json数据;匹配步骤,将当前的所述json行数据与预设json对象进行匹配,确定匹配预设json对象,所述匹配预设json对象为与当前的所述json行数据所属的json对象的对象名相同的所述预设json对象,所述预设json对象的所述对象名与历史json对象的所述对象名一一对应,与所述预设json对象的所述对象名相同的所述历史json对象包括所述预设json对象的所有的键,所述预设json对象中所有的所述键的值为空,所述历史json对象为所述串口输出的历史json数据包含的json对象;解析步骤,采用所述匹配预设json对象的函数对当前的所述json行数据进
行解析,得到当前的所述json行数据中所述键的值;赋值步骤,将当前的所述json行数据中所述键的值赋值到所述匹配预设json对象;重复步骤,依次重复所述获取步骤、所述匹配步骤、所述解析步骤和所述赋值步骤至少一次,直至所述串口输出当前的所述json行数据对应的所述json对象的所有的所述json行数据,得到结构体的所述json对象。
12.可选地,所述匹配步骤包括:在当前的所述json行数据中存在所述对象名的情况下,将与当前的所述json行数据的所述对象名相同的所述预设json对象确定为所述匹配预设json对象,并标记当前的所述json行数据的所述对象名,得到对象名标志;在存在所述对象名标志且当前的所述json行数据中不存在所述对象名的情况下,将所述对象名与所述对象名标志相同的所述预设json对象确定为所述匹配预设json对象。
13.可选地,所述重复步骤包括:在当前的所述json行数据中存在json数据结束符的情况下,将当前的所述json行数据中所述键的值赋值到所述匹配预设json对象,得到结构体的所述json对象,并清除所述对象名标志。
14.可选地,所述重复步骤还包括:将当前的所述json行数据中所述键的值赋值到临时json对象,直至所述串口输出当前的所述json行数据对应的所述json对象的所有的所述json行数据,所述临时json对象为拷贝所述匹配预设json对象得到的;将所述临时json对象的所有的所述键的值赋值到所述匹配预设json对象。
15.可选地,在所述重复步骤之后,所述方法还包括:获取第一json结构体与第二json结构体,所述第一json结构体为ocpp请求消息对应的结构体的所述json对象,所述第二json结构体为所述ocpp请求消息的反馈消息对应的结构体的所述json对象;根据特殊符号将所述第一json结构体与所述第二json结构体进行匹配,得到所述ocpp请求消息对应的所述反馈消息,所述特殊符号与所述json对象一一对应。
16.可选地,在当前的所述json行数据中存在所述对象名的情况下,将与当前的所述json行数据的所述对象名相同的所述预设json对象确定为所述匹配预设json对象,包括:通过正则匹配当前的所述json行数据的所述对象名与所述预设json对象的所述对象名进行匹配,将与当前的所述json行数据的所述对象名相同的所述预设json对象确定为所述匹配预设json对象。
17.可选地,采用所述匹配预设json对象的函数对当前的所述json行数据进行解析,得到当前的所述json行数据中所述键的值,包括:通过正则匹配将当前的所述json行数据的所述键与所述匹配预设json对象的所述键进行匹配,得到匹配结果;在所述匹配结果为匹配成功的情况下,采用所述匹配预设json对象的函数对匹配成功的所述键和对应的值进行解析,得到匹配成功的所述键的值。
18.根据本发明实施例的另一方面,还提供了一种串口数据的实时解析装置,包括:获取单元,用于执行获取步骤,获取当前的json行数据,所述json行数据为串口输出的一行json数据;第一匹配单元,用于执行匹配步骤,将当前的所述json行数据与预设json对象进行匹配,确定匹配预设json对象,所述匹配预设json对象为与当前的所述json行数据所属的json对象的对象名相同的所述预设json对象,所述预设json对象的所述对象名与历史json对象的所述对象名一一对应,与所述预设json对象的所述对象名相同的所述历史json对象包括所述预设json对象的所有的键,所述预设json对象中所有的所述键的值为空,所述历史json对象为所述串口输出的历史json数据包含的json对象;解析单元,用于执行解
析步骤,采用所述匹配预设json对象的函数对当前的所述json行数据进行解析,得到当前的所述json行数据中所述键的值;赋值单元,用于执行赋值步骤,将当前的所述json行数据中所述键的值赋值到所述匹配预设json对象;重复单元,用于执行重复步骤,依次重复所述获取步骤、所述匹配步骤、所述解析步骤和所述赋值步骤至少一次,直至所述串口输出当前的所述json行数据对应的所述json对象的所有的所述json行数据,得到结构体的所述json对象。
19.根据本发明实施例的再一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的程序,其中,所述程序被处理器执行时,所述处理器执行任意一种所述的方法。
20.根据本发明实施例的又一方面,还提供了一种充电系统,包括:充电桩、服务器、一个或多个处理器、存储器以及一个或多个程序,其中,充电桩和服务器通过ocpp协议进行通信,所述一个或多个程序被存储在所述存储器中,并且被配置为由所述一个或多个处理器执行,所述一个或多个程序包括用于执行任意一种所述的方法。
21.在本发明实施例中,上述串口数据的实时解析方法中,首先,执行获取步骤,获取当前的json行数据,上述json行数据为串口输出的一行json数据;然后,执行匹配步骤,将当前的上述json行数据与预设json对象进行匹配,确定匹配预设json对象,上述匹配预设json对象为与当前的上述json行数据所属的json对象的对象名相同的上述预设json对象,上述预设json对象的上述对象名与历史json对象的上述对象名一一对应,与上述预设json对象的上述对象名相同的上述历史json对象包括上述预设json对象的所有的键,上述预设json对象中所有的上述键的值为空,上述历史json对象为上述串口输出的历史json数据包含的json对象;之后,执行解析步骤,采用上述匹配预设json对象的函数对当前的上述json行数据进行解析,得到当前的上述json行数据中上述键的值;之后,执行赋值步骤,将当前的上述json行数据中上述键的值赋值到上述匹配预设json对象;最后,执行重复步骤,依次重复上述获取步骤、上述匹配步骤、上述解析步骤和上述赋值步骤至少一次,直至上述串口输出当前的上述json行数据对应的上述json对象的所有的上述json行数据,得到结构体的上述json对象。该方法通过实现获取串口输出的json行数据,将json行数据匹配至对象名相同的预设json对象,得到匹配预设json对象,通过匹配预设json对象的函数解析json行数据的键的值赋值至匹配预设json对象,直至得到结构体的json对象,实现了json数据的实时解析,解决了现有技术中无法实时逐行解析串口输出的json数据的问题。
附图说明
22.构成本技术的一部分的说明书附图用来提供对本技术的进一步理解,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
23.图1示出了根据本技术的一种实施例的串口数据的实时解析方法的流程图;
24.图2示出了根据本技术的另一种实施例的串口数据的实时解析方法的流程图;
25.图3示出了根据本技术的另一种实施例的ocpp消息响应的流程图;
26.图4示出了根据本技术的一种实施例的串口数据的实时解析装置的示意图。
具体实施方式
27.应该指出,以下详细说明都是例示性的,旨在对本技术提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本技术所属技术领域的普通技术人员通常理解的相同含义。
28.需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本技术的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
29.应该理解的是,当元件(诸如层、膜、区域、或衬底)描述为在另一元件“上”时,该元件可直接在该另一元件上,或者也可存在中间元件。而且,在说明书以及权利要求书中,当描述有元件“连接”至另一元件时,该元件可“直接连接”至该另一元件,或者通过第三元件“连接”至该另一元件。
30.为了便于描述,以下对本技术实施例涉及的部分名词或术语进行说明:
31.ocpp全称是open charge point protocol,即开放充电协议,该协议由位于荷兰的组织oca(open charge alliance,开放充电联盟)进行制定。oca是一个国际化的联盟组织,包括了公共和私人领域的电动汽车基础设施的领军企业和主体,其目的是通过合作、教育、测试和认证来推广电动汽车充点设施通信协议的发展和应用,同时推广相关协议的行业标准。
32.json(javascript object notation)数据格式作为ocpp通信协议指定的数据格式之一,被广泛用于充电桩和后台服务器之间通信以及数据传递。
33.正如背景技术中所说的,现有技术中无法实时逐行解析串口输出的json数据,为了解决上述问题,本技术的一种典型的实施方式中,提供了一种串口数据的实时解析方法、解析装置、计算机可读存储介质和充电系统。
34.根据本技术的实施例,提供了一种串口数据的实时解析方法。
35.图1是根据本技术实施例的串口数据的实时解析方法的流程图。如图1所示,该方法包括以下步骤:
36.步骤s101,获取步骤,获取当前的json行数据,上述json行数据为串口输出的一行json数据;
37.需要说明的是,对于串口数据的抓取,以后台线程的方式抓取,采用python的thread进行多线程操作,以便主进程可以做数据的分析,串口数据按行获取。
38.步骤s102,匹配步骤,将当前的上述json行数据与预设json对象进行匹配,确定匹配预设json对象,上述匹配预设json对象为与当前的上述json行数据所属的json对象的对象名相同的上述预设json对象,上述预设json对象的上述对象名与历史json对象的上述对象名一一对应,与上述预设json对象的上述对象名相同的上述历史json对象包括上述预设json对象的所有的键,上述预设json对象中所有的上述键的值为空,上述历史json对象为上述串口输出的历史json数据包含的json对象;
39.为了确定上述json行数据对应的json对象,一种可选的实施方式中,上述匹配步骤包括:
40.步骤s1021,在当前的上述json行数据中存在上述对象名的情况下,将与当前的上
述json行数据的上述对象名相同的上述预设json对象确定为上述匹配预设json对象,并标记当前的上述json行数据的上述对象名,得到对象名标志;
41.步骤s1022,在存在上述对象名标志且当前的上述json行数据中不存在上述对象名的情况下,将上述对象名与上述对象名标志相同的上述预设json对象确定为上述匹配预设json对象。
42.上述实施方式中,串口输出的数据中json对象的第一个json行数据存在对象名,根据对象名即可匹配对象名相同的预设json对象,得到上述匹配预设json对象,并标记当前的上述json行数据的上述对象名,得到对象名标志flag,之后输出的json行数据的不存在对象名,根据对象名标志也可以匹配该预设json对象,使得串口即使输出的一行数据,也可以确定其对应的json对象,便于后续进行解析。
43.需要说明的是,如图2所示,根据不同的json对象,预置json对象的数据字典,得到预设json对象,即针对于所需要处理的json对象先设置预设json对象,预设json对象中的所有的键key,所有的键key的值value设为空,以便后续读取到数据后,向预设的json对象中写入读取到的值,例如,键key包括“connectorid”、“idtag”、“meterstart”、和“timestamp”,在json对象为ocpp请求消息对应的json对象的情况下,在预设json对象中,同时预设ocpp对该消息对象的反馈response,例如,“status/transactionid”。
44.为了保障匹配正确,一种可选的实施方式中,在当前的上述json行数据中存在上述对象名的情况下,将与当前的上述json行数据的上述对象名相同的上述预设json对象确定为上述匹配预设json对象,包括:
45.步骤s10211,通过正则匹配当前的上述json行数据的上述对象名与上述预设json对象的上述对象名进行匹配,将与当前的上述json行数据的上述对象名相同的上述预设json对象确定为上述匹配预设json对象。
46.上述实施方式中,针对不同的json对象,以及对象内需处理的key,需预设所有的正则对象,以此来判断当前处理的串口数据为该json对象或该key,例如,json对象的正则处理根据ocpp消息格式,附带该消息的特殊符号,以防止误判,例如,特殊符号为“\"statusnotification\",\{”,如图2所示,上述预设json对象包括第一预设json对象、第二预设json对象和第三预设json对象,依次进行匹配,例如,第一预设json对象为匹配预设json对象,记录第一预设json对象的flag,拷贝第一预设json对象得到临时json对象。
47.步骤s103,解析步骤,采用上述匹配预设json对象的函数对当前的上述json行数据进行解析,得到当前的上述json行数据中上述键的值;
48.为了实时解析串口输出的数据,一种可选的实施方式中,采用上述匹配预设json对象的函数对当前的上述json行数据进行解析,得到当前的上述json行数据中上述键的值,包括:
49.步骤s1031,通过正则匹配将当前的上述json行数据的上述键与上述匹配预设json对象的上述键进行匹配,得到匹配结果;
50.步骤s1032,在上述匹配结果为匹配成功的情况下,采用上述匹配预设json对象的函数对匹配成功的上述键和对应的值进行解析,得到匹配成功的上述键的值。
51.上述实施方式中,上述匹配预设json对象可以包括上述对象名相同的上述历史json对象所有的键key,也可以选择部分需要的,通过正则匹配将当前的上述json行数据的
上述键与上述匹配预设json对象的上述键进行匹配,采用json对象的专项处理函数对需要的键进行解析,即对匹配成功的上述键进行解析,得到匹配成功的上述键的值,实现实时对串口输出的数据的解析,解析的数据以供后续处理。
52.步骤s104,赋值步骤,将当前的上述json行数据中上述键的值赋值到上述匹配预设json对象;
53.步骤s105,重复步骤,依次重复上述获取步骤、上述匹配步骤、上述解析步骤和上述赋值步骤至少一次,直至上述串口输出当前的上述json行数据对应的上述json对象的所有的上述json行数据,得到结构体的上述json对象。
54.为了连续解析串口输出的数据,一种可选的实施方式中,上述重复步骤包括:
55.步骤s1051,在当前的上述json行数据中存在json数据结束符的情况下,将当前的上述json行数据中上述键的值赋值到上述匹配预设json对象,得到结构体的上述json对象,并清除上述对象名标志。
56.上述实施方式中,当识别到json数据结束符,即完成当前json对象的解析,得到结构体的上述json对象,结束后清除上述对象名标志,进入下一个json对象的解析,保障串口数据解析的连续性,如图2所示,按行读取串口数据,识别当前的上述json行数据中存在json数据结束符,退出匹配预设json对象的函数,清空flag,并将临时json对象赋值到匹配预设json对象。
57.为了防止串口在输出数据在json消息输出一半的时候中断,一种可选的实施方式中,上述重复步骤还包括:
58.步骤s1052,将当前的上述json行数据中上述键的值赋值到临时json对象,直至上述串口输出当前的上述json行数据对应的上述json对象的所有的上述json行数据,上述临时json对象为拷贝上述匹配预设json对象得到的;
59.步骤s1053,将上述临时json对象的所有的上述键的值赋值到上述匹配预设json对象。
60.上述实施方式中,将预设的json对象深度拷贝一份到临时json对象,在下一步赋值的时候,先赋值到该临时json对象,即使串口在输出数据在json消息输出一半的时候中断,也可将赋值一半的临时json对象舍弃,继续下一个串口数据对应的json对象的解析。
61.为了实现ocpp系统和客户端的消息响应解析,一种可选的实施方式中,在上述重复步骤之后,上述方法还包括:
62.步骤s106,获取第一json结构体与第二json结构体,上述第一json结构体为ocpp请求消息对应的结构体的上述json对象,上述第二json结构体为上述ocpp请求消息的反馈消息对应的结构体的上述json对象;
63.步骤s107,根据上述特殊符号将上述第一json结构体与上述第二json结构体进行匹配,得到上述ocpp请求消息对应的上述反馈消息,上述特殊符号与上述json对象一一对应。
64.上述实施方式中,如图3所示,获取当前json对象对应的消息的特殊符号sn,根据特殊符号sn对串口消息过滤,判断是否有该特殊符号sn字眼的消息,根据上述对象名将上述第一json结构体与上述第二json结构体进行匹配,得到当前ocpp请求消息的反馈,不仅实时解析消息,并完成消息的响应的解析。
65.需要说明的是,ocpp的消息请求,不管是客户端请求,还是服务端请求,每个请求都必须得有一个响应,故在处理ocpp消息数据时,就必须观测它的响应,是接受还是拒绝,或者是回复的配置内容,ocpp的响应为事件型,且每一条消息有一条加密的特殊符号sn,该特殊符号sn为有且唯一的一个值。消息响应时,会根据此对象名sn进行响应,所以在处理ocpp消息响应时,可以利用此对象名sn的唯一性,进行配对处理,并将响应的消息记录进预设的json对象中。根据json消息对象,利用正则,获取该json消息对象的特殊符号sn,并存储此对象名sn为该消息的特殊符号sn,在处理完此json对象消息提取时,根据正则,从串口数据中继续过滤该对象名sn消息,如果过滤到,则根据相应的正则,提取该响应的结果,存储进该json消息对象的响应数据中。
66.上述串口数据的实时解析方法中,首先,执行获取步骤,获取当前的json行数据,上述json行数据为串口输出的一行json数据;然后,执行匹配步骤,将当前的上述json行数据与预设json对象进行匹配,确定匹配预设json对象,上述匹配预设json对象为与当前的上述json行数据所属的json对象的对象名相同的上述预设json对象,上述预设json对象的上述对象名与历史json对象的上述对象名一一对应,与上述预设json对象的上述对象名相同的上述历史json对象包括上述预设json对象的所有的键,上述预设json对象中所有的上述键的值为空,上述历史json对象为上述串口输出的历史json数据包含的json对象;之后,执行解析步骤,采用上述匹配预设json对象的函数对当前的上述json行数据进行解析,得到当前的上述json行数据中上述键的值;之后,执行赋值步骤,将当前的上述json行数据中上述键的值赋值到上述匹配预设json对象;最后,执行重复步骤,依次重复上述获取步骤、上述匹配步骤、上述解析步骤和上述赋值步骤至少一次,直至上述匹配预设json对象的所有的上述键的值均不为空,得到结构体的上述json对象。该方法通过实现获取串口输出的json行数据,将json行数据匹配至对象名相同的预设json对象,得到匹配预设json对象,通过匹配预设json对象的函数解析json行数据的键的值赋值至匹配预设json对象,直至得到结构体的json对象,实现了json数据的实时解析,解决了现有技术中无法实时逐行解析串口输出的json数据的问题。
67.需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
68.本技术实施例还提供了一种json数据的实时解析装置,需要说明的是,本技术实施例的json数据的实时解析装置可以用于执行本技术实施例所提供的用于json数据的实时解析方法。以下对本技术实施例提供的json数据的实时解析装置进行介绍。
69.图4是根据本技术实施例的json数据的实时解析装置的示意图。如图4所示,该装置包括:
70.获取单元10,用于执行获取步骤,获取当前的json行数据,上述json行数据为串口输出的一行json数据;
71.需要说明的是,对于串口数据的抓取,以后台线程的方式抓取,采用python的thread进行多线程操作,以便主进程可以做数据的分析,串口数据按行获取。
72.第一匹配单元20,用于执行匹配步骤,将当前的上述json行数据与预设json对象进行匹配,确定匹配预设json对象,上述匹配预设json对象为与当前的上述json行数据所
属的json对象的对象名相同的上述预设json对象,上述预设json对象的上述对象名与历史json对象的上述对象名一一对应,与上述预设json对象的上述对象名相同的上述历史json对象包括上述预设json对象的所有的键,上述预设json对象中所有的上述键的值为空,上述历史json对象为上述串口输出的历史json数据包含的json对象;
73.为了确定上述json行数据对应的json对象,一种可选的实施方式中,上述第一匹配单元包括:
74.第一确定模块,用于在当前的上述json行数据中存在上述对象名的情况下,将与当前的上述json行数据的上述对象名相同的上述预设json对象确定为上述匹配预设json对象,并标记当前的上述json行数据的上述对象名,得到对象名标志;
75.第二确定模块,用于在存在上述对象名标志且当前的上述json行数据中不存在上述对象名的情况下,将上述对象名与上述对象名标志相同的上述预设json对象确定为上述匹配预设json对象。
76.上述实施方式中,串口输出的数据中json对象的第一个json行数据存在对象名,根据对象名即可匹配对象名相同的预设json对象,得到上述匹配预设json对象,并标记当前的上述json行数据的上述对象名,得到对象名标志flag,之后输出的json行数据的不存在对象名,根据对象名标志也可以匹配该预设json对象,使得串口即使输出的一行数据,也可以确定其对应的json对象,便于后续进行解析。
77.需要说明的是,如图2所示,根据不同的json对象,预置json对象的数据字典,得到预设json对象,即针对于所需要处理的json对象先设置预设json对象,预设json对象中的所有的键key,所有的键key的值value设为空,以便后续读取到数据后,向预设的json对象中写入读取到的值,例如,键key包括“connectorid”、“idtag”、“meterstart”、和“timestamp”,在json对象为ocpp请求消息对应的json对象的情况下,在预设json对象中,同时预设ocpp对该消息对象的反馈response,例如,“status/transactionid”。
78.为了保障匹配正确,一种可选的实施方式中,上述第一确定模块包括:
79.确定子模块用于通过正则匹配当前的上述json行数据的上述对象名与上述预设json对象的上述对象名进行匹配,将与当前的上述json行数据的上述对象名相同的上述预设json对象确定为上述匹配预设json对象。
80.上述实施方式中,针对不同的json对象,以及对象内需处理的key,需预设所有的正则对象,以此来判断当前处理的串口数据为该json对象或该key,例如,json对象的正则处理根据ocpp消息格式,附带该消息的特殊符号,以防止误判,例如,特殊符号为“\"statusnotification\",\{”,如图2所示,上述预设json对象包括第一预设json对象、第二预设json对象和第三预设json对象,依次进行匹配,例如,第一预设json对象为匹配预设json对象,记录第一预设json对象的flag,拷贝第一预设json对象得到临时json对象。
81.解析单元30,用于执行解析步骤,采用上述匹配预设json对象的函数对当前的上述json行数据进行解析,得到当前的上述json行数据中上述键的值;
82.为了实时解析串口输出的数据,一种可选的实施方式中,上述解析单元包括:
83.第一匹配模块,用于通过正则匹配将当前的上述json行数据的上述键与上述匹配预设json对象的上述键进行匹配,得到匹配结果;
84.解析模块,用于在上述匹配结果为匹配成功的情况下,采用上述匹配预设json对
象的函数对匹配成功的上述键和对应的值进行解析,得到匹配成功的上述键的值。
85.上述实施方式中,上述匹配预设json对象可以包括上述对象名相同的上述历史json对象所有的键key,也可以选择部分需要的,通过正则匹配将当前的上述json行数据的上述键与上述匹配预设json对象的上述键进行匹配,采用json对象的专项处理函数对需要的键进行解析,即对匹配成功的上述键进行解析,得到匹配成功的上述键的值,实现实时对串口输出的数据的解析,解析的数据以供后续处理。
86.赋值单元40,用于执行赋值步骤,将当前的上述json行数据中上述键的值赋值到上述匹配预设json对象;
87.重复单元50,用于执行重复步骤,依次重复上述获取步骤、上述匹配步骤、上述解析步骤和上述赋值步骤至少一次,直至上述串口输出当前的上述json行数据对应的上述json对象的所有的上述json行数据,得到结构体的上述json对象。
88.为了连续解析串口输出的数据,一种可选的实施方式中,上述重复单元包括:
89.处理模块,用于在当前的上述json行数据中存在json数据结束符的情况下,将当前的上述json行数据中上述键的值赋值到上述匹配预设json对象,得到结构体的上述json对象,并清除上述对象名标志。
90.上述实施方式中,当识别到json数据结束符,即完成当前json对象的解析,得到结构体的上述json对象,结束后清除上述对象名标志,进入下一个json对象的解析,保障串口数据解析的连续性,如图2所示,按行读取串口数据,识别当前的上述json行数据中存在json数据结束符,退出匹配预设json对象的函数,清空flag,并将临时json对象赋值到匹配预设json对象。
91.为了防止串口在输出数据在json消息输出一半的时候中断,一种可选的实施方式中,上述重复单元还包括:
92.第一赋值模块,用于将当前的上述json行数据中上述键的值赋值到临时json对象,直至上述串口输出当前的上述json行数据对应的上述json对象的所有的上述json行数据,上述临时json对象为拷贝上述匹配预设json对象得到的;
93.第二赋值模块,用于将上述临时json对象的所有的上述键的值赋值到上述匹配预设json对象。
94.上述实施方式中,将预设的json对象深度拷贝一份到临时json对象,在下一步赋值的时候,先赋值到该临时json对象,即使串口在输出数据在json消息输出一半的时候中断,也可将赋值一半的临时json对象舍弃,继续下一个串口数据对应的json对象的解析。
95.为了实现ocpp系统和客户端的消息响应解析,一种可选的实施方式中,上述装置还包括第二匹配单元,上述第二匹配单元包括:
96.获取模块,用于获取第一json结构体与第二json结构体,上述第一json结构体为ocpp请求消息对应的结构体的上述json对象,上述第二json结构体为上述ocpp请求消息的反馈消息对应的结构体的上述json对象;
97.第二匹配模块,根据特殊符号将上述第一json结构体与上述第二json结构体进行匹配,得到上述ocpp请求消息对应的上述反馈消息,上述特殊符号与上述json对象一一对应。
98.上述实施方式中,如图3所示,获取当前json对象对应的消息的特殊符号sn,根据
特殊符号sn对串口消息过滤,判断是否有该对象名sn字眼的消息,根据上述对象名将上述第一json结构体与上述第二json结构体进行匹配,得到当前ocpp请求消息的反馈,不仅实时解析消息,并完成消息的响应的解析。
99.需要说明的是,ocpp的消息请求,不管是客户端请求,还是服务端请求,每个请求都必须得有一个响应,故在处理ocpp消息数据时,就必须观测它的响应,是接受还是拒绝,或者是回复的配置内容,ocpp的响应为事件型,且每一条消息有一条加密的特殊符号sn,该特殊符号sn为有且唯一的一个值。消息响应时,会根据此特殊符号sn进行响应,所以在处理ocpp消息响应时,可以利用此特殊符号sn的唯一性,进行配对处理,并将响应的消息记录进预设的json对象中。根据json消息对象,利用正则,获取该json消息对象的特殊符号sn,并存储此特殊符号sn为该消息的特殊符号sn,在处理完此json对象消息提取时,根据正则,从串口数据中继续过滤该特殊符号sn消息,如果过滤到,则根据相应的正则,提取该响应的结果,存储进该json消息对象的响应数据中。
100.上述串口数据的实时解析装置中,获取单元执行获取步骤,获取当前的json行数据,上述json行数据为串口输出的一行json数据;第一匹配单元执行匹配步骤,将当前的上述json行数据与预设json对象进行匹配,确定匹配预设json对象,上述匹配预设json对象为与当前的上述json行数据所属的json对象的对象名相同的上述预设json对象,上述预设json对象的上述对象名与历史json对象的上述对象名一一对应,与上述预设json对象的上述对象名相同的上述历史json对象包括上述预设json对象的所有的键,上述预设json对象中所有的上述键的值为空,上述历史json对象为上述串口输出的历史json数据包含的json对象;解析单元执行解析步骤,采用上述匹配预设json对象的函数对当前的上述json行数据进行解析,得到当前的上述json行数据中上述键的值;赋值单元执行赋值步骤,将当前的上述json行数据中上述键的值赋值到上述匹配预设json对象;重复单元执行重复步骤,依次重复上述获取步骤、上述匹配步骤、上述解析步骤和上述赋值步骤至少一次,直至上述匹配预设json对象的所有的上述键的值均不为空,得到结构体的上述json对象。该装置通过实现获取串口输出的json行数据,将json行数据匹配至对象名相同的预设json对象,得到匹配预设json对象,通过匹配预设json对象的函数解析json行数据的键的值赋值至匹配预设json对象,直至得到结构体的json对象,实现了json数据的实时解析,解决了现有技术中无法实时逐行解析串口输出的json数据的问题。
101.本技术实施例还提供了一种充电系统,包括:充电桩、服务器、一个或多个处理器、存储器以及一个或多个程序,其中,充电桩和服务器通过ocpp协议进行通信,上述一个或多个程序被存储在上述存储器中,并且被配置为由上述一个或多个处理器执行,上述一个或多个程序包括用于执行任意一种上述的方法。
102.上述充电系统中,包括充电桩和服务器,充电桩和服务器通过ocpp协议进行通信,通过实现获取串口输出的json行数据,将json行数据匹配至对象名相同的预设json对象,得到匹配预设json对象,通过匹配预设json对象的函数解析json行数据的键的值赋值至匹配预设json对象,直至得到结构体的json对象,实现了json数据的实时解析,解决了现有技术中无法实时逐行解析串口输出的json数据的问题。
103.上述串口数据的实时解析装置包括处理器和存储器,上述获取单元、第一匹配单元和解析单元等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程
序单元来实现相应的功能。
104.处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来解决现有技术中无法实时逐行解析串口输出的json数据的问题。
105.存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram),存储器包括至少一个存储芯片。
106.本发明实施例提供了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现上述方法。
107.本发明实施例提供了一种处理器,上述处理器用于运行程序,其中,上述程序运行时执行上述方法。
108.本发明实施例提供了一种设备,设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现至少以下步骤:
109.步骤s101,获取步骤,获取当前的json行数据,所述json行数据为串口输出的一行json数据;
110.步骤s102,匹配步骤,将当前的所述json行数据与预设json对象进行匹配,确定匹配预设json对象,所述匹配预设json对象为与当前的所述json行数据所属的json对象的对象名相同的所述预设json对象,所述预设json对象的所述对象名与历史json对象的所述对象名一一对应,与所述预设json对象的所述对象名相同的所述历史json对象包括所述预设json对象的所有的键,所述预设json对象中所有的所述键的值为空,所述历史json对象为所述串口输出的历史json数据包含的json对象;
111.步骤s103,解析步骤,采用所述匹配预设json对象的函数对当前的所述json行数据进行解析,得到当前的所述json行数据中所述键的值;
112.步骤s104,赋值步骤,将当前的所述json行数据中所述键的值赋值到所述匹配预设json对象;
113.步骤s105,重复步骤,依次重复所述获取步骤、所述匹配步骤、所述解析步骤和所述赋值步骤至少一次,直至所述匹配预设json对象的所有的所述键的值均不为空,得到结构体的所述json对象。
114.本文中的设备可以是服务器、pc、pad、手机等。
115.本技术还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有至少如下方法步骤的程序:
116.步骤s101,获取步骤,获取当前的json行数据,所述json行数据为串口输出的一行json数据;
117.步骤s102,匹配步骤,将当前的所述json行数据与预设json对象进行匹配,确定匹配预设json对象,所述匹配预设json对象为与当前的所述json行数据所属的json对象的对象名相同的所述预设json对象,所述预设json对象的所述对象名与历史json对象的所述对象名一一对应,与所述预设json对象的所述对象名相同的所述历史json对象包括所述预设json对象的所有的键,所述预设json对象中所有的所述键的值为空,所述历史json对象为所述串口输出的历史json数据包含的json对象;
118.步骤s103,解析步骤,采用所述匹配预设json对象的函数对当前的所述json行数据进行解析,得到当前的所述json行数据中所述键的值;
119.步骤s104,赋值步骤,将当前的所述json行数据中所述键的值赋值到所述匹配预设json对象;
120.步骤s105,重复步骤,依次重复所述获取步骤、所述匹配步骤、所述解析步骤和所述赋值步骤至少一次,直至所述匹配预设json对象的所有的所述键的值均不为空,得到结构体的所述json对象。
121.在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
122.在本技术所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如上述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
123.上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
124.另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
125.上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取计算机可读存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个计算机可读存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例上述方法的全部或部分步骤。而前述的计算机可读存储介质包括:u盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
126.从以上的描述中,可以看出,本技术上述的实施例实现了如下技术效果:
127.1)、本技术的串口数据的实时解析方法中,首先,执行获取步骤,获取当前的json行数据,上述json行数据为串口输出的一行json数据;然后,执行匹配步骤,将当前的上述json行数据与预设json对象进行匹配,确定匹配预设json对象,上述匹配预设json对象为与当前的上述json行数据所属的json对象的对象名相同的上述预设json对象,上述预设json对象的上述对象名与历史json对象的上述对象名一一对应,与上述预设json对象的上述对象名相同的上述历史json对象包括上述预设json对象的所有的键,上述预设json对象中所有的上述键的值为空,上述历史json对象为上述串口输出的历史json数据包含的json对象;之后,执行解析步骤,采用上述匹配预设json对象的函数对当前的上述json行数据进行解析,得到当前的上述json行数据中上述键的值;之后,执行赋值步骤,将当前的上述
json行数据中上述键的值赋值到上述匹配预设json对象;最后,执行重复步骤,依次重复上述获取步骤、上述匹配步骤、上述解析步骤和上述赋值步骤至少一次,直至上述匹配预设json对象的所有的上述键的值均不为空,得到结构体的上述json对象。该方法通过实现获取串口输出的json行数据,将json行数据匹配至对象名相同的预设json对象,得到匹配预设json对象,通过匹配预设json对象的函数解析json行数据的键的值赋值至匹配预设json对象,直至得到结构体的json对象,实现了json数据的实时解析,解决了现有技术中无法实时逐行解析串口输出的json数据的问题。
128.2)、本技术的串口数据的实时解析装置中,获取单元执行获取步骤,获取当前的json行数据,上述json行数据为串口输出的一行json数据;第一匹配单元执行匹配步骤,将当前的上述json行数据与预设json对象进行匹配,确定匹配预设json对象,上述匹配预设json对象为与当前的上述json行数据所属的json对象的对象名相同的上述预设json对象,上述预设json对象的上述对象名与历史json对象的上述对象名一一对应,与上述预设json对象的上述对象名相同的上述历史json对象包括上述预设json对象的所有的键,上述预设json对象中所有的上述键的值为空,上述历史json对象为上述串口输出的历史json数据包含的json对象;解析单元执行解析步骤,采用上述匹配预设json对象的函数对当前的上述json行数据进行解析,得到当前的上述json行数据中上述键的值;赋值单元执行赋值步骤,将当前的上述json行数据中上述键的值赋值到上述匹配预设json对象;重复单元执行重复步骤,依次重复上述获取步骤、上述匹配步骤、上述解析步骤和上述赋值步骤至少一次,直至上述匹配预设json对象的所有的上述键的值均不为空,得到结构体的上述json对象。该装置通过实现获取串口输出的json行数据,将json行数据匹配至对象名相同的预设json对象,得到匹配预设json对象,通过匹配预设json对象的函数解析json行数据的键的值赋值至匹配预设json对象,直至得到结构体的json对象,实现了json数据的实时解析,解决了现有技术中无法实时逐行解析串口输出的json数据的问题。
129.3)、本技术的充电系统中,包括充电桩和服务器,充电桩和服务器通过ocpp协议进行通信,通过实现获取串口输出的json行数据,将json行数据匹配至对象名相同的预设json对象,得到匹配预设json对象,通过匹配预设json对象的函数解析json行数据的键的值赋值至匹配预设json对象,直至得到结构体的json对象,实现了json数据的实时解析,解决了现有技术中无法实时逐行解析串口输出的json数据的问题。
130.以上所述仅为本技术的优选实施例而已,并不用于限制本技术,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1