【问题标题】:Constructing JSON with a number as an attribute name使用数字作为属性名称构造 JSON
【发布时间】:2020-08-17 14:51:22
【问题描述】:

Informatica CAI 内部发生以下问题。这里我只能访问 Xquery 来编辑变量和构造数据。

我正在尝试将 JSON 的属性名称映射到数字。此问题的一个可读示例是输入/临时/输出变量 $json

等于

{
   "Person":
   {
      "Name": "Jerry",
      "Age": "42"
   }
}

和一个临时变量 $MapTable

{
   "Name": "3456_1",
   "Age": "3456_2"
}    

当尝试使用 Xquery 映射 $MapTable 中的数字以代替 $json 中的“姓名”和“年龄”时,我收到一个 “无效的元素名称。无效的 QName {3456_1}”错误。”我相信这是由于 XML 名称规定。

有谁知道解决这个问题的方法,所以我可以最终得到 $json 等于

{
   "Person":
   {
       "3456_1": "Jerry",
       "3456_2": "42"
   }
}

注意:我在 Informatica 的云应用程序集成论坛上发布了相同的问题。

【问题讨论】:

  • 没错,QName 不能以数字开头,见en.m.wikipedia.org/wiki/QName
  • 你试过declare option output:method "json";吗?
  • 嗨 Pavel,当我在我的 xquery 上面写这个表达式时,它没有验证成功,例如:声明选项输出:方法“json”; for $x in $input.JSON/node() return element {fn:node-name($x)}{5} 我需要定义或导入其他东西吗?或者也许在别处添加声明?
  • 尝试返回一个字符串而不是元素。
  • 使用 fn:replace 的解决方案解决了这个问题。

标签: json xml xquery informatica informatica-cloud


【解决方案1】:

我可以使用 xquery 生成这样的 json,而不是最终得到正确的 json 属性名称 { “人”: { "__3456_1": "杰瑞", “__3456_2”:“42” } } 双下划线前缀允许 informatica 不会崩溃。然后我们可以在保存 json 的变量上使用函数“fn:replace”来删除他的双下划线:fn:replace("__",""),留下我们想要的 JSON。

这不是我的问题的完美解决方案,因为从一个 json 映射到另一个 json 的脚本仍未创建。

【讨论】:

    猜你喜欢
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多