CN110727703A - 一种自动识别json代码中注释的方法及装置 - Google Patents

一种自动识别json代码中注释的方法及装置 Download PDF

Info

Publication number
CN110727703A
CN110727703A CN201910899559.5A CN201910899559A CN110727703A CN 110727703 A CN110727703 A CN 110727703A CN 201910899559 A CN201910899559 A CN 201910899559A CN 110727703 A CN110727703 A CN 110727703A
Authority
CN
China
Prior art keywords
character
annotation
json
identifying
matching
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201910899559.5A
Other languages
English (en)
Other versions
CN110727703B (zh
Inventor
凤凯
王昱旸
于鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jiangsu Biying Technology Co ltd
Jiangsu Suning Cloud Computing Co ltd
Original Assignee
Suning Cloud Computing Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Suning Cloud Computing Co Ltd filed Critical Suning Cloud Computing Co Ltd
Priority to CN201910899559.5A priority Critical patent/CN110727703B/zh
Publication of CN110727703A publication Critical patent/CN110727703A/zh
Application granted granted Critical
Publication of CN110727703B publication Critical patent/CN110727703B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2457Query processing with adaptation to user needs
    • G06F16/24573Query processing with adaptation to user needs using data annotations, e.g. user-defined metadata
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Library & Information Science (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Document Processing Apparatus (AREA)

Abstract

本发明公开了一种自动识别JSON代码中注释的方法及装置。所述方法包括:将JSON代码解析成语法树,遍历所述语法树,并在遍历的过程中识别所述JSON代码中的所有字段名称和每一个所述字段名称对应的值;匹配每一个所述值后面的首个与注释开始标识符一致的字符,若匹配成功,则在所述注释开始标识符后匹配首个与注释结束标识符一致的字符,识别所述注释开始标识符与所述注释结束标识符之间的内容为与所述值对应的所述字段名称的字段名称的注释。本发明可以支持JSON代码中注释的正确保存,极大地帮助编程人员理解JSON代码中每个字段名称的注释含义和规则,减少编程人员之间的沟通成本,提高开发效率。

Description

一种自动识别JSON代码中注释的方法及装置
技术领域
本发明涉及计算机技术领域,特别涉及一种自动识别JSON代码中注释的方法及装置。
背景技术
JSON代码是一种由属性-值对组成的数据对象实现数据交换的开放标准格式,它主要用来在服务器和Web应用之间传输数据,作为XML的替代方案。尽管最初是从JavaScript脚本语言派生的,但JSON是一种与语言无关(language-independent)的数据格式,用于解析和生产JSON数据的代码很容易以各种编程语言提供。
目前在企业级,JSON数据格式已经获得了很大的关注,因为它比其它基于Web的数据格式更灵活和更容易使用,是移动世界中高度优选的数据格式。JSON代码被推广作为对其他数据格式的低开销替代方案,这些其他格式在其通常使用的实现世界情景中广泛支持创建、读取和解码。除了XML以外,其它示例还包括OGDL、YAML和CSV等。
虽然JSON有着诸多的优势,但是在实际使用场景中还是存在一些问题,比如:不支持注释、不支持单引号字符串、不支持键名不带引号。其中关于对JSON代码支持注释的问题,由于JSON代码本身是一种简单的数据传输格式,不会存在复杂的逻辑,因此包括JSON代码的作者在内,都认为JSON代码是不需要注释的。但是当JSON代码与相关业务关联落成文档时,技术人员就有获取JSON代码每一个字段的意义和规则的需求,这时JSON代码的注释就显得尤为重要。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种自动识别JSON代码中注释的方法及装置。所述技术方案如下:
一方面,提供了一种自动识别JSON代码中注释的方法,所述方法包括:
将JSON代码解析成语法树,遍历所述语法树,并在遍历的过程中识别所述JSON代码中的所有字段名称和每一个所述字段名称对应的值;
匹配每一个所述值后面的首个与注释开始标识符一致的字符,若匹配成功,则在所述注释开始标识符后匹配首个与注释结束标识符一致的字符,识别所述注释开始标识符与所述注释结束标识符之间的内容为与所述值对应的所述字段名称的字段名称的注释。进一步地,所述注释开始标识符为双斜杠,所述注释结束标识符为换行符。
进一步地,在遍历的过程中识别所述JSON代码中的所有字段名称和每一个所述字段名称对应的值,包括:将非标准格式的JSON代码转换为标准格式的JSON代码。
进一步地,将非标准格式的JSON代码转换为标准格式的JSON代码,包括:
在遍历的过程中识别每一个对象类型开始符以及逗号;
将第一字符与字符串类型开始符匹配,所述第一字符为所述对象类型开始符或所述逗号后的首个非空且非换行符的字符,其中若所述逗号后的首个非空且非换行符的字符为注释标识开始符,则所述第一字符为与所述注释开始标识符对应的所述注释结标识束符后的首个非空字符;若匹配不成功则判断所述第一字符是否为非规范字符,若是则用指定字符替换所述第一字符,若不是则在所述第一字符前添加所述指定字符。
进一步地,将非标准格式的JSON代码转换为标准格式的JSON代码,还包括:
查找所述第一字符后的冒号,将第二字符与字符串类型结束符匹配,所述第二字符为所述冒号前的首个非空字符;
若匹配不成功,则判断所述第二字符是否为非规范字符,若是则用所述指定字符替换所述第二字符,若不是则在所述第二字符后添加所述指定字符;
识别所述第一字符与所述第二字符之间的内容为字段名称,或,识别所述对象类型开始符后的首个指定字符或所述字符串类型开始符与所述冒号前的首个指定字符或所述字符串类型结束符之间的内容为字段名称,若所述第一字符和所述第二字符中有任意一个或者两个字符为转义字符,则所述转义字符后的首个字符为所述字段名称中的字符。
进一步地,将非标准格式的JSON代码转换为标准格式的JSON代码,还包括:
将第三字符与类型符集匹配,所述第三字符为所述冒号后的首个非空字符;
若所述第三字符不属于所述类型符集中的任一类型符,则判断所述第三字符是否为非规范字符,若是则用所述指定字符替换所述第三字符,若不是则在所述第三字符前添加所述指定字符。
进一步地,将非标准格式的JSON代码转换为标准格式的JSON代码,还包括:
在所述第三字符后查找所述逗号或者与所述对象类型开始符相对应的对象类型结束符,判断第四字符是否与所述第三字符相对应,所述第四字符是所述逗号或者所述对象类型结束符或所述注释开始标识符前的首个非空字符;
若所述第四字符与所述第三字符不相对应则判断所述第四字符是否为非规范字符,若是则用所述指定字符替换所述第四字符,若否则在所述第四字符后添加所述指定字符;
识别所述第三字符与所述第四字符之间的内容为与所述字段名称对应的值,或,识别所述冒号后的首个指定字符或所述字符串类型开始符与所述逗号或者所述对象类型结束符前的首个指定字符或所述字符串类型结束符之间的内容为与所述字段名称对应的值,若所述第三字符和所述第四字符中有任意一个字符或者两个字符为所述转义字符,则所述转义字符后的首个字符为所述值中的字符。
进一步地,所述类型符集中包括:对象类型开始符、数组类型开始符、字符串类型开始符、逻辑值、null、数字。
进一步地,所述方法还包括:
在识别所述注释后,根据所述JSON代码生成JSON代码报文表格或者API接口文档。
另一方面,提供了一种自动识别JSON代码中注释的装置,所述装置包括:
解析模块,用于将JSON代码解析成语法树;
遍历模块,用于遍历所述语法树,并在遍历的过程中识别所述JSON代码中的所有字段名称和每一个所述字段名称对应的值;
所述遍历模块包括:匹配模块,用于匹配每一个所述值后面的首个与注释开始标识符一致的字符,若匹配成功,则在所述注释开始标识符后匹配首个与注释结束标识符一致的字符,识别所述注释开始标识符与所述注释结束标识符之间的内容为与所述值对应的所述字段名称的字段名称的注释。进一步地,所述注释开始标识符为双斜杠,所述注释结束标识符为换行符。
进一步地,所述匹配模块,还用于在遍历的过程中将非标准格式的JSON代码转换为标准格式的JSON代码。
进一步地,所述匹配模块,具体用于在遍历的过程中识别每一个对象类型开始符以及逗号;
将第一字符与字符串类型开始符匹配,所述第一字符为所述对象类型开始符或所述逗号后的首个非空且非换行符的字符,其中若所述逗号后的首个非空且非换行符的字符为注释标识开始符,则所述第一字符为与所述注释开始标识符对应的所述注释结标识束符后的首个非空字符;若匹配不成功则判断所述第一字符是否为非规范字符,若是则用指定字符替换所述第一字符,若不是则在所述第一字符前添加所述指定字符。
进一步地,所述匹配模块,具体用于查找所述第一字符后的冒号,将所述第二字符与字符串类型结束符匹配,所述第二字符为所述冒号前的首个非空字符;
若匹配不成功,则判断所述第二字符是否为非规范字符,若是则用所述指定字符替换所述第二字符,若不是则在所述第二字符后添加所述指定字符;
识别所述第一字符与所述第二字符之间的内容为字段名称,或,识别所述对象类型开始符后的首个指定字符或所述字符串类型开始符与所述冒号前的首个指定字符或所述字符串类型结束符之间的内容为字段名称,若所述第一字符和所述第二字符中有任意一个或者两个字符为转义字符,则所述转义字符后的首个字符为所述字段名称中的字符。
进一步地,所述匹配模块,具体用于将第三字符与类型符集匹配,所述第三字符为所述冒号后的首个非空字符;
若所述第三字符不属于所述类型符集中的任一类型符,则判断所述第三字符是否为非规范字符,若是则用所述指定字符替换所述第三字符,若不是则在所述第三字符前添加所述指定字符。
进一步地,所述匹配模块,具体用于在所述第三字符后查找逗号或者与所述对象类型开始符相对应的对象类型结束符,判断第四字符是否与所述第三字符相对应,所述第四字符是所述逗号或者所述对象类型结束符或所述注释开始标识符前的首个非空字符;
若所述第四字符与所述第三字符不相对应则判断所述第四字符是否为非规范字符,若是则用所述指定字符替换所述第四字符,若否则在所述第四字符后添加所述指定字符;
识别所述第三字符与所述第四字符之间的内容为与所述字段名称对应的值,或,识别所述冒号后的首个指定字符或所述字符串类型开始符与所述逗号或者所述对象类型结束符前的首个指定字符或所述字符串类型结束符之间的内容为与所述字段名称对应的值,若所述第三字符和所述第四字符中有任意一个字符或者两个字符为所述转义字符,则所述转义字符后的首个字符为所述值中的字符。
进一步地,所述类型符集中包括:对象类型开始符、数组类型开始符、字符串类型开始符、逻辑值、null、数字。
进一步地,所述装置还包括:提醒模块,用于在所述遍历的过程中出现错误时,生成错误警告。
进一步地,所述装置还包括:可视化模块,用于在识别所述注释后,根据所述JSON代码生成JSON报文表格或者API接口文档。
本发明实施例提供的技术方案带来的有益效果是:
本发明既能够实现标准格式的JSON代码中注释的自动识别,又能够实现非标准格式的代码中注释的自动识别,并能在注释识别的过程中将非标准格式的JSON代码转化为标准格式的JSON代码,采用本发明公开的方案后,可以支持JSON代码中注释的正确保存,极大地帮助编程人员理解JSON代码中每个字段名称的注释含义和规则,减少编程人员之间的沟通成本,提高开发效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例1提供的自动识别JSON代码中注释的方法流程图;
图2是本发明实施例1提供的自动识别JSON代码中注释的装置模块示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
JSON一种轻量级的数据交换格式,其语言简洁、层次清晰,完全独立与编程语言的文本格式,易于人阅读的编写,也易于机器的解析和生成。在实际的应用中为了便于前后端编程人员的沟通,需要将代码中的JSON与相关业务关联生成文档,以供编程人员查阅,但是由于JSON代码不支持注释,当JSON代码生成文档时存在不能识别注释,以及识别出的注释不能与其所属的JSON代码对应的问题,从而导致阅读人员不能十分清楚JSON代码中一些字段的含义和规则。因此为了便于JSON代码生成文档的阅读,本发明提供一种能够自动识别JSON代码中注释的方法及装置,通过本发明提供的技术方案,能够对标准的JSON代码字段和非标准的JSON代码字段的注释均能够识别,便于编程人员对JSON代码的理解。
实施例1
如图1所示,一种自动识别JSON代码中注释的方法,包括:
将JSON代码解析成语法树,遍历所述语法树,并在遍历的过程中识别所述JSON代码中的所有字段名称和每一个所述字段名称对应的值;
匹配每一个所述值的后面的首个与注释开始标识符一致的字符,若匹配成功,则在所述注释开始标识符后匹配首个与注释结束标识符一致的字符,识别所述注释开始标识符与所述注释结束标识符之间的内容为与所述值对应的所述字段名称的字段名称的注释。
本发明公开的方法涉及到带注释的JSON代码,考虑到一般情况下代码编程人员习惯将注释写在行末,即值的后面,因此上述公开的注释识别方法中定义为值末尾处注释开始标识符和注释结束标识符之间的内容为该字段名称的注释。基于上述原因,要识别字段名称的注释,就需要识别JSON代码中的字段名称和值。现有技术中识别字段名称和值的方法主要包括正则匹配法和基于AST的遍历匹配识别法,其中正则匹配法是基于正则表达式的匹配识别方法,正则表达式中规定了一些特定的字符和特定字符的组合,通过上述特定字符和组合过滤JSON代码,例如将代码中的单引号替换为双引号等,但是由于正则匹配法是统一识别统一替换,容易将字符串中的符号也按照正则表达式进行替换,导致识别失败。因为本发明公开的方法中采用基于AST的遍历匹配识别法。AST(抽象语法树)是源代码语法结构的一种抽象表示,其以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。AST的遍历匹配识别法有按照前后顺序依次匹配的特点,因此采用AST的遍历匹配识别法能够将字符串以及标识符号和分隔符号等区别开,不会误将字符串中的符号替换掉。将JSON代码转化为语法树后,开始对语法树进行遍历,识别出字段名称和值,然后在进行值后面的注释的识别。上述方法中的字段开始标识符可以是人为指定的任意一种符号,由于JSON是一种基于ECMAScript的一个子集,而ECMAScript是欧洲计算机协会制定的js规范,所以在JSON中使用注释我们直接使用了js的语法,因此本发明实施例优选为双斜杠即“//”。字段结束标识符同样也可以是认为指定的任意一种符号,基于前述理由本发明实施例优选为换行符即
上述方法中,在遍历语法树的过程中识别字段名称和与该字段名称对应的值时发放实现的关键。在识别字段名称和值的过程中,如果存在非标准格式的JSON代码则需要将其转换为标准格式的JSON代码,其方法包括:
在遍历的过程中识别每一个对象类型开始符以及逗号;
将第一字符与字符串类型开始符匹配,所述第一字符为所述对象类型开始符或所述逗号后的首个非空且非换行符的字符,其中若所述逗号后的首个非空且非换行符的字符为注释标识开始符,则所述第一字符为与所述注释开始标识符对应的所述注释结标识束符后的首个非空字符。若匹配不成功则判断所述第一字符是否为非规范字符,若是则用指定字符替换所述第一字符,若不是则在所述第一字符前添加所述指定字符;
查找所述第一字符后的冒号,将第二字符与字符串类型结束符匹配,所述第二字符为所述冒号前的首个非空字符。若匹配成功,则判断所述第二字符是否为非规范字符,若是则用所述指定字符替换所述第二字符,若不是则在所述第二字符后添加所述指定字符;
识别所述第一字符与所述第二字符之间的内容为字段名称,或,识别所述对象类型开始符后的首个指定字符或所述字符串类型开始符与所述冒号前的首个指定字符或所述字符串类型结束符之间的内容为字段名称;
在所述第三字符后查找所述逗号或者与所述对象类型开始符相对应的对象类型结束符,判断第四字符是否与所述第三字符相对应,所述第四字符是所述逗号或者所述对象类型结束符或所述注释开始标识符前的首个非空字符;
若所述第四字符与所述第三字符不相对应则判断所述第四字符是否为非规范字符,若是则用所述指定字符替换所述第四字符,若否则在所述第四字符后添加所述指定字符;
识别所述第三字符与所述第四字符之间的内容为与所述字段名称对应的值,或,识别所述冒号后的首个指定字符或所述字符串类型开始符与所述逗号或者所述对象类型结束符前的首个指定字符或所述字符串类型结束符之间的内容为与所述字段名称对应的值。
另外,上述遍历过程中还存在另一种情况,即第一字符、第二字符、第三字符、第四字符中的任意一个或者多个为转移字符,则转移字符后的首个字符为字段名称或者值中的字符。
转义字符通常为“\”,主要用于将代码中具有特殊意义的标识符转换为普通的字符,例如:在JSON中双引号代表字符串类型符号,若双引号前面首个非空字符为转义字符则该双引号则为普通的字符,其可以被识别为字段名称或者值中的字符。
通过上述识别方法,即可识别出JSON代码中所有的字段名称和与其对应的值。上述方法中,字符的匹配时随着遍历的进程依次进行的,从代码中的首个字符开始匹配,遇到匹配不成功的字符便进行指定字符替换或者指定符号的添加,若字符串前后端中仅一端的符号不是字符串类型符,则可识别一侧为指定字符一侧为字符串类型符之间内容。其中所述的对象类型开始符、对象类型结束符分别优选为JSON代码中规定的符号“{”“}”,所述的字符串类型开始符优选为“"”,所述的冒号“:”为JSON代码中字段名称和值的分隔符,所述的逗号“,”为字段名称/值对的分隔符,所述的类型符集包括JSON代码中值的所有类型符,优选为包括:对象类型开始符“{”、数组类型开始符“[”、字符串类型开始符“"”、逻辑值“ture”以及“false”、null以及数字。上述方法中的非规范字符可以包括人为指定的代码编程人员容易出错的字符,本发明实施例优选为“'”和“'”。所述的指定字符可以是人为规定的任意一种符号。
在JSON代码中,首个非空字符一般为对象类型开始符“{”或者数组类型开始符“[”即表示JSON代码为对象型或者数组型。而数组中往往包括多个对象,因此数组类型开始符后通常还是对象类型开始符。对象中通常包括字段名称/值对,因此对象类型开始符后通常是字段名称,而字段名称仅可能是字符串类型,也就是说字段名称仅可能被“""”包裹,所以要在对象类型开始符后的首个非空字符与字符串类型符匹配。在JSON代码编程时,编程人员还可能存在不输入任何符号直接写字段名称的错误,因此若第一字符不是非规范字符,则认为对象类型开始符后的内容即为字段名称,则需要采用规范的字符串类型符包裹字段名称。冒号是字段名称和值的分隔符,因此查找到冒号即可查找到字段名称的结束位置和值的开始位置,识别冒号前的首个非空字符和识别冒号后的首个非空字符即可判断出字段名称后的字符串类型符是否标准,值前面的类型符是否标准。在一个字段名称/值对的识别完成后,值后面可能是逗号,表示后面还有字段名称/值对,值后面还有可能是对象类型结束符,表示至此该对象结束,因此无论是哪种情况都表示逗号或对象类型结束符前是一个完整的字段名称/值对,因此只要识别逗号或对象类型结束符前的首个非空字符即可。
若对象中存在多个字段名称/值对,则存在字段名称/值对前的符号为逗号,因此在识别对象类型开始符同时还需要识别逗号,以保证将对象中的其它字段名称/值对也识别出来。
上述方法中,若JSON代码为规范的JSON代码,即没有出现上述匹配不成功的情况,则直接进行注释识别。通过上述方法即可将JSON代码中的注释识别出来,同时也能将非标准格式的JSON代码转化为标准格式的JSON代码。这样,在识别注释后,根据转化后的JSON代码即可生成JSON报文表格或者API接口文档。
如图2所示,根据上述方法,本发明实施例还提供了一种自动识别JSON代码中注释的装置,包括:
解析模块,用于将JSON代码解析成语法树;
遍历模块,用于遍历所述语法树,并在遍历的过程中识别所述JSON代码中的所有字段名称和每一个所述字段名称对应的值;
所述遍历模块包括:匹配模块,用于匹配每一个所述值后面的首个与注释开始标识符一致的字符,若所述值后的首个非空字符与所述注释开始标识符一致,则在所述注释开始标识符后匹配首个与注释结束标识符一致的字符,识别所述注释开始标识符与所述注释结束标识符之间的内容为与所述值对应的所述字段名称的字段名称的注释。
上述识别注释的装置主要包括解析和遍历两大模块,遍历模块中的匹配模块承担主要的注释识别任务。如此之外对于非规范的JSON代码,匹配模块还用于将非标准格式的JSON代码转换为标准格式的JSON代码,具体包括:
在遍历的过程中识别每一个对象类型开始符以及逗号;
将第一字符与字符串类型开始符匹配,所述第一字符为所述对象类型开始符或所述逗号后的首个非空且非换行符的字符,其中若所述逗号后的首个非空且非换行符的字符为注释标识开始符,则所述第一字符为与所述注释开始标识符对应的所述注释结标识束符后的首个非空字符;若匹配不成功则判断所述第一字符是否为非规范字符,若是则用指定字符替换所述第一字符,若不是则在所述第一字符前添加所述指定字符;
查找所述第一字符后的冒号,将所述第二字符与字符串类型结束符匹配,所述第二字符为所述冒号前的首个非空字符;
若匹配不成功,则判断所述第二字符是否为非规范字符,若是则用所述指定字符替换所述第二字符,若不是则在所述第二字符后添加所述指定字符;
识别所述第一字符与所述第二字符之间的内容为字段名称,或,识别所述对象类型开始符后的首个指定字符或所述字符串类型开始符与所述冒号前的首个指定字符或所述字符串类型结束符之间的内容为字段名称;
将第三字符与类型符集匹配,所述第三字符为所述冒号后的首个非空字符;
若所述第三字符不属于所述类型符集中的任一类型符,则判断所述第三字符是否为非规范字符,若是则用所述指定字符替换所述第三字符,若不是则在所述第三字符前添加所述指定字符;
在所述第三字符后查找逗号或者与所述对象类型开始符相对应的对象类型结束符,判断第四字符是否与所述第三字符相对应,所述第四字符是所述逗号或者所述对象类型结束符或所述注释开始标识符前的首个非空字符;
若所述第四字符与所述第三字符不相对应则判断所述第四字符是否为非规范字符,若是则用所述指定字符替换所述第四字符,若否则在所述第四字符后添加所述指定字符;
识别所述第三字符与所述第四字符之间的内容为与所述字段名称对应的值,或,识别所述冒号后的首个指定字符或所述字符串类型开始符与所述逗号或者所述对象类型结束符前的首个指定字符或所述字符串类型结束符之间的内容为与所述字段名称对应的值。
以上所述的类型符集中包括:对象类型开始符、数组类型开始符、字符串类型开始符、逻辑值、null、数字。
若所述第一字符、所述第二字符、所述第三字符、所述第四字符中的任意一个为转义字符,则所述匹配模块识别所述转义字符后的首个字符为所述字段名称或所述值中的字符。
为了提醒用户输入的JSON代码中含有非规范的格式,本发明实施例公开的装置还包括:
提醒模块,用于在将JSON代码解析成语法树的过程中出现错误时,生成错误警告。
为了使本装置能够直接生成文档,本发明实施例公开的装置还包括:可视化模块,用于在识别所述注释后,根据所述JSON代码生成JSON报文表格或者API接口文档。
本发明公开的自动识别JSON代码中注释的装置能够基于用户上传的JSON代码先进行解析和遍历匹配,若在遍历匹配中出现格式错误或者其他问题则通过提醒模块发出错误告警,遍历匹配成功后通过可视化模块生成JSON报文表格或者API接口文档用于编程人员之间的代码传输。
实施例2
本实施例在实施例1的基础上,结合具体场景的应用对本发明做详细的说明和解释。
原始的JSON代码为:
上述原始JSON代码为对象型,其含义是employee对象是包含3个员工记录(对象)的数组。其存在的错误有:
1)employees非规范符号包裹;
2)数组中第一个对象中的firstName的前面没有字符串类型符;
3)数组中第二个对象中lastName的前面的符号不是字符串类型符;
4)数组中第三个对象中Carter后面是非规范字符。
双斜杠以及换行符之间的内容为其前面最近的字段名称的注释,即注释开始标识符为“//”,注释结束标识符为类型符集包括:对象类型开始符“{”、数组类型开始符“[”、字符串类型开始符“"”、逻辑值“ture”以及“false”、null以及数字。非规范符号为“'”,指定字符为“*”。
基于上述原始代码,利用本发明实施例公开的方法识别注释,具体的步骤如下:
S01、将上述JSON代码解析成语法树。
S02、开始遍历语法树。识别JSON代码中的首个非空字符为对象类型开始符“{”则向后匹配“{”后的首个非空且非换行符的字符是否与字符串类型开始符一致,匹配结果为不一致,则用指定字符“*”代替“'”,继续向后匹配到冒号,判断冒号前的首个非空字符是否为字符串类型结束符,匹配结果为不一致,则用指定字符“*”代替“'”,至此识别出第一个字段名称为employees。向冒号后匹配首个非空字符是否为类型符集中的任意字符,匹配结果为是数组类型开始符,则判断属于employees的值为数组,向后匹配,识别出对象类型开始符“{”,向后匹配“{”的首个非空且非换行符的字符是否为字符串类型开始符,匹配结果为否,则判断其是否为“'”结果为否,在firstName中的f前添加“*”,继续向后匹配冒号,重复前述的冒号前和冒号后的首个非空字符的匹配工作,匹配成功,这样即识别出第二个字段名称“firstName”和该字段名称的值“Bill”。继续向后查找到逗号,进行逗号前后的首个非空且非换行符的字符的匹配工作,向后继续匹配直至匹配到第一个“//”则向“//”后查找换行符从而识别出属于第一个对象中firstName的注释。依次类推,边向后遍历边匹配,在特定的位置处识别出非规范字符则用指定字符替换,识别不是非规范字符则在字符串前添加指定字符,直到匹配到与数组类型开始符“[”对应的数组类型结束符“]”,这样就把employees的值识别出来了,在继续向后查找注释开始标识符,即可识别出JSON代码中所有的字段名称和值,以及与字段名称对应的注释。遍历后形成的规范的代码为:
Figure BDA0002211400420000151
S03、注释识别完成后,根据上述JSON代码生成JSON代码报文表格或者API接口文档。
实现上述自动识别JSON代码中注释方法的装置包括:
解析模块,主要用于执行上述方法中的S01;
遍历模块,其中包括匹配模块,主要用于执行上述方法中的S02;
提醒模块,主要用户在遍历过程中出现匹配不成功时,生成错误警告;
可视化模块,主要用于执行上述方法中的S03。
本发明既能够实现标准格式的JSON代码中注释的自动识别,又能够实现非标准格式的代码中注释的自动识别,并能在注释识别的过程中将非标准格式的JSON代码转化为标准格式的JSON代码,采用本发明公开的方案后,可以支持JSON代码中注释的正确保存,极大地帮助编程人员理解JSON代码中每个字段名称的注释含义和规则,减少编程人员之间的沟通成本,提高开发效率。
上述所有可选技术方案,可以采用任意结合形成本发明的可选实施例,在此不再一一赘述。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种自动识别JSON代码中注释的方法,其特征在于,包括以下步骤:
将JSON代码解析成语法树,遍历所述语法树,并在遍历的过程中识别所述JSON代码中的所有字段名称和每一个所述字段名称对应的值;
匹配每一个所述值后面的首个与注释开始标识符一致的字符,若匹配成功,则在所述注释开始标识符后匹配首个与注释结束标识符一致的字符,识别所述注释开始标识符与所述注释结束标识符之间的内容为与所述值对应的所述字段名称的字段名称的注释。
2.如权利要求1所述的一种自动识别JSON代码中注释的方法,其特征在于,在遍历的过程中识别所述JSON代码中的所有字段名称和每一个所述字段名称对应的值,包括:将非标准格式的JSON代码转换为标准格式的JSON代码。
3.如权利要求2所述的一种自动识别JSON代码中注释的方法,其特征在于,将非标准格式的JSON代码转换为标准格式的JSON代码,包括:
在遍历的过程中识别每一个对象类型开始符以及逗号;
将第一字符与字符串类型开始符匹配,所述第一字符为所述对象类型开始符或所述逗号后的首个非空且非换行符的字符,其中若所述逗号后的首个非空且非换行符的字符为注释标识开始符,则所述第一字符为与所述注释开始标识符对应的所述注释结标识束符后的首个非空字符;若匹配不成功则判断所述第一字符是否为非规范字符,若是则用指定字符替换所述第一字符,若不是则在所述第一字符前添加所述指定字符。
4.如权利要求3所述的一种自动识别JSON代码中注释的方法,其特征在于,将非标准格式的JSON代码转换为标准格式的JSON代码,还包括:
查找所述第一字符后的冒号,将第二字符与字符串类型结束符匹配,所述第二字符为所述冒号前的首个非空字符;
若匹配不成功,则判断所述第二字符是否为非规范字符,若是则用所述指定字符替换所述第二字符,若不是则在所述第二字符后添加所述指定字符;
识别所述第一字符与所述第二字符之间的内容为字段名称,或,识别所述对象类型开始符后的首个指定字符或所述字符串类型开始符与所述冒号前的首个指定字符或所述字符串类型结束符之间的内容为字段名称,若所述第一字符和所述第二字符中有任意一个或者两个字符为转义字符,则所述转义字符后的首个字符为所述字段名称中的字符。
5.如权利要求4所述的一种自动识别JSON代码中注释的方法,其特征在于,将非标准格式的JSON代码转换为标准格式的JSON代码,还包括:
将第三字符与类型符集匹配,所述第三字符为所述冒号后的首个非空字符;
若所述第三字符不属于所述类型符集中的任一类型符,则判断所述第三字符是否为非规范字符,若是则用所述指定字符替换所述第三字符,若不是则在所述第三字符前添加所述指定字符。
6.如权利要求5所述的一种自动识别JSON代码中注释的方法,其特征在于,将非标准格式的JSON代码转换为标准格式的JSON代码,还包括:
在所述第三字符后查找所述逗号或者与所述对象类型开始符相对应的对象类型结束符,判断第四字符是否与所述第三字符相对应,所述第四字符是所述逗号或者所述对象类型结束符或所述注释开始标识符前的首个非空字符;
若所述第四字符与所述第三字符不相对应则判断所述第四字符是否为非规范字符,若是则用所述指定字符替换所述第四字符,若否则在所述第四字符后添加所述指定字符;
识别所述第三字符与所述第四字符之间的内容为与所述字段名称对应的值,或,识别所述冒号后的首个指定字符或所述字符串类型开始符与所述逗号或者所述对象类型结束符前的首个指定字符或所述字符串类型结束符之间的内容为与所述字段名称对应的值,若所述第三字符和所述第四字符中有任意一个字符或者两个字符为所述转义字符,则所述转义字符后的首个字符为所述值中的字符。
7.如权利要求5所述的一种自动识别JSON代码中注释的方法,其特征在于,所述类型符集中包括:对象类型开始符、数组类型开始符、字符串类型开始符、逻辑值、null、数字。
8.如权利要求1~7中任意一项所述的一种自动识别JSON代码中注释的方法,其特征在于,所述方法还包括:
在识别所述注释后,根据所述JSON代码生成JSON代码报文表格或者API接口文档。
9.一种自动识别JSON代码中注释的装置,其特征在于,包括:
解析模块,用于将JSON代码解析成语法树;
遍历模块,用于遍历所述语法树,并在遍历的过程中识别所述JSON代码中的所有字段名称和每一个所述字段名称对应的值;
所述遍历模块包括:匹配模块,用于匹配每一个所述值后面的首个与注释开始标识符一致的字符,若匹配成功,则在所述注释开始标识符后匹配首个与注释结束标识符一致的字符,识别所述注释开始标识符与所述注释结束标识符之间的内容为与所述值对应的所述字段名称的字段名称的注释。
10.如权利要求9所述的一种自动识别JSON代码中注释的装置,其特征在于,所述装置还包括:可视化模块,用于在识别所述注释后,根据所述JSON代码生成JSON报文表格或者API接口文档。
CN201910899559.5A 2019-09-23 2019-09-23 一种自动识别json代码中注释的方法及装置 Active CN110727703B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910899559.5A CN110727703B (zh) 2019-09-23 2019-09-23 一种自动识别json代码中注释的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910899559.5A CN110727703B (zh) 2019-09-23 2019-09-23 一种自动识别json代码中注释的方法及装置

Publications (2)

Publication Number Publication Date
CN110727703A true CN110727703A (zh) 2020-01-24
CN110727703B CN110727703B (zh) 2022-10-11

Family

ID=69218241

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910899559.5A Active CN110727703B (zh) 2019-09-23 2019-09-23 一种自动识别json代码中注释的方法及装置

Country Status (1)

Country Link
CN (1) CN110727703B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111401002A (zh) * 2020-03-11 2020-07-10 山东浪潮通软信息科技有限公司 一种自动识别pdf电子回单信息的方法、装置与计算机存储介质
CN112214212A (zh) * 2020-10-10 2021-01-12 江西洪都航空工业集团有限责任公司 一种根据json格式数据生成c#语言源代码的方法
CN112685326A (zh) * 2021-01-26 2021-04-20 政采云有限公司 一种软件测试方法、系统、设备及可读存储介质
CN112783919A (zh) * 2021-02-02 2021-05-11 广州海量数据库技术有限公司 查询语句的字符串处理方法及装置
CN113468866A (zh) * 2021-06-30 2021-10-01 建信金融科技有限责任公司 非标准json串的解析方法及装置
CN114338855A (zh) * 2022-03-17 2022-04-12 成都瑞华康源科技有限公司 一种实现hl7、fhir标准、自定义xml消息的解析生成方法

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101512503A (zh) * 2005-04-29 2009-08-19 微软公司 Xml应用程序框架
CN102654873A (zh) * 2011-03-03 2012-09-05 苏州同程旅游网络科技有限公司 基于中文分词的旅游信息抽取与聚合方法
CN103514026A (zh) * 2013-09-27 2014-01-15 摩卡软件(天津)有限公司 一种通过javascript直接调用java api的方法
CN105138464A (zh) * 2015-09-30 2015-12-09 沈文策 一种程序代码处理方法和装置
CN106294606A (zh) * 2016-07-29 2017-01-04 北京蓝威技术有限公司 一种基于通用读写框架的cae文件转换方法及装置
CN106682107A (zh) * 2016-12-05 2017-05-17 中国工商银行股份有限公司 数据库表关联关系确定方法及装置
WO2017081687A9 (en) * 2015-11-10 2017-06-22 Ofek - Eshkolot Research And Development Ltd Protein design method and system
CN109871519A (zh) * 2019-02-18 2019-06-11 北京思特奇信息技术股份有限公司 一种无层级结构的json反序列化方法、装置及存储介质
CN109947646A (zh) * 2019-03-13 2019-06-28 平安信托有限责任公司 接口测试方法、装置、计算机设备和存储介质

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101512503A (zh) * 2005-04-29 2009-08-19 微软公司 Xml应用程序框架
CN102654873A (zh) * 2011-03-03 2012-09-05 苏州同程旅游网络科技有限公司 基于中文分词的旅游信息抽取与聚合方法
CN103514026A (zh) * 2013-09-27 2014-01-15 摩卡软件(天津)有限公司 一种通过javascript直接调用java api的方法
CN105138464A (zh) * 2015-09-30 2015-12-09 沈文策 一种程序代码处理方法和装置
WO2017081687A9 (en) * 2015-11-10 2017-06-22 Ofek - Eshkolot Research And Development Ltd Protein design method and system
CN106294606A (zh) * 2016-07-29 2017-01-04 北京蓝威技术有限公司 一种基于通用读写框架的cae文件转换方法及装置
CN106682107A (zh) * 2016-12-05 2017-05-17 中国工商银行股份有限公司 数据库表关联关系确定方法及装置
CN109871519A (zh) * 2019-02-18 2019-06-11 北京思特奇信息技术股份有限公司 一种无层级结构的json反序列化方法、装置及存储介质
CN109947646A (zh) * 2019-03-13 2019-06-28 平安信托有限责任公司 接口测试方法、装置、计算机设备和存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
刘希冀: "基于Spark的海量数据实时查询系统的设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111401002A (zh) * 2020-03-11 2020-07-10 山东浪潮通软信息科技有限公司 一种自动识别pdf电子回单信息的方法、装置与计算机存储介质
CN112214212A (zh) * 2020-10-10 2021-01-12 江西洪都航空工业集团有限责任公司 一种根据json格式数据生成c#语言源代码的方法
CN112214212B (zh) * 2020-10-10 2024-04-02 江西洪都航空工业集团有限责任公司 一种根据json格式数据生成c#语言源代码的方法
CN112685326A (zh) * 2021-01-26 2021-04-20 政采云有限公司 一种软件测试方法、系统、设备及可读存储介质
CN112783919A (zh) * 2021-02-02 2021-05-11 广州海量数据库技术有限公司 查询语句的字符串处理方法及装置
CN113468866A (zh) * 2021-06-30 2021-10-01 建信金融科技有限责任公司 非标准json串的解析方法及装置
CN114338855A (zh) * 2022-03-17 2022-04-12 成都瑞华康源科技有限公司 一种实现hl7、fhir标准、自定义xml消息的解析生成方法
CN114338855B (zh) * 2022-03-17 2022-05-20 成都瑞华康源科技有限公司 一种实现hl7、fhir标准、自定义xml消息的解析生成方法

Also Published As

Publication number Publication date
CN110727703B (zh) 2022-10-11

Similar Documents

Publication Publication Date Title
CN110727703B (zh) 一种自动识别json代码中注释的方法及装置
CN108491199B (zh) 一种自动生成接口的方法及终端
CN102713834A (zh) 管理记录格式信息
CN111090641B (zh) 数据处理方法及装置、电子设备、存储介质
CN112671734B (zh) 面向多数据源的报文处理方法及其相关设备
CN111913739B (zh) 一种服务接口原语定义方法和系统
CN109146095A (zh) 多业务系统问题的处理方法和装置
CN114338855B (zh) 一种实现hl7、fhir标准、自定义xml消息的解析生成方法
CN106874163A (zh) 一种显示软件错误码信息的方法及系统
CN112698868B (zh) 一种应用于多系统的统一错误码方法和存储设备
CN108241658B (zh) 一种日志模式发现方法及系统
CN114090671A (zh) 数据导入方法、装置、电子设备及存储介质
US9436664B2 (en) Performing multiple scope based search and replace within a document
CN110414010A (zh) 国际化资源文件翻译文本的处理方法、可读存储介质
CN106843808B (zh) 一种兼容不同格式类型的指令解析方法
CN114168149A (zh) 一种数据转换方法及装置
CN113127776A (zh) 面包屑路径生成方法、装置及终端设备
JP6870159B1 (ja) データ処理装置、データ処理方法及びプログラム
CN109189372A (zh) 保险产品的开发脚本生成方法及终端设备
CN110515653A (zh) 文档生成方法、装置、电子设备及计算机可读存储介质
Wang et al. DeepUserLog: Deep Anomaly Detection on User Log Using Semantic Analysis and Key-Value Data
CN113127635B (zh) 数据处理方法、装置及系统,存储介质和电子设备
Al-Msie’deen BushraDBR: An Automatic Approach to Retrieving Duplicate Bug Reports
CN117349244A (zh) Excel文件导出方法、系统、计算机设备和可读存储介质
CN115344580A (zh) 一种基于Python语言的抽数建表方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP03 Change of name, title or address

Address after: No.1-1 Suning Avenue, Xuzhuang Software Park, Xuanwu District, Nanjing, Jiangsu Province, 210000

Patentee after: Jiangsu Suning cloud computing Co.,Ltd.

Country or region after: China

Address before: No.1-1 Suning Avenue, Xuzhuang Software Park, Xuanwu District, Nanjing, Jiangsu Province, 210000

Patentee before: Suning Cloud Computing Co.,Ltd.

Country or region before: China

CP03 Change of name, title or address
TR01 Transfer of patent right

Effective date of registration: 20240205

Address after: Room 3104, Building A5, No. 3 Gutan Avenue, Economic Development Zone, Gaochun District, Nanjing City, Jiangsu Province, 210000

Patentee after: Jiangsu Biying Technology Co.,Ltd.

Country or region after: China

Address before: No.1-1 Suning Avenue, Xuzhuang Software Park, Xuanwu District, Nanjing, Jiangsu Province, 210000

Patentee before: Jiangsu Suning cloud computing Co.,Ltd.

Country or region before: China

TR01 Transfer of patent right