MarkLogic协调数据清理如何解析数据并将其分离为



我正在使用MarkLogic 10。我有一个加载了JSON数据的数据库。我有一个字段没有被解析。我想做的是:样本数据:

{"books": {"Harry Potter": {"text": "There are several harry potter books:/n-Chamber of Secrets/n--chess/n--dog/n-Goblet of Fire/n--dragon/n--broomstick "}

所需的输出类似于:

{"books": {"Harry Potter": {"subject": "There are several harry potter books:",
"book 1" : { 
"title": "-Chamber of Secrets",
"Contents 1" : "--chess",
"Contents 2" : "--dog"},
"book 2" : { 
"title":"-Goblet of Fire",
"Contents 1" : "--dragon",
"Contents 2" : "--broomstick"}}}}

MarkLogic有一个可以轻松做到这一点的函数吗?

将文本字符串中的行映射到输出对象的属性将需要脚本。

服务器端JavaScript中可用的函数可以进行映射:

  • 将text属性的值拆分为换行符上的字符串数组https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split
  • 使用https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

reducer的种子值可能是一个JavaScript对象,它包含状态(树中前一个节点的深度(和当前输出对象(根据需要初始化(。

减速器功能可能会执行以下操作:

  • 将当前字符串的前导连字符与https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match
  • 获取前导连字符字符串的长度以确定当前深度https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length
  • 根据深度更新状态和输出对象:
    • 如果当前深度大于先前深度,则打开一个新对象
    • 如果当前深度小于先前深度,则关闭先前对象
    • 如果先前的深度相同,则在相同深度处添加特性

在加载之前,还可以用支持JSON的客户端语言进行映射。

希望有帮助,

最新更新