【问题标题】:Convert large xml values into double type json?将大 xml 值转换为双类型 json?
【发布时间】:2019-05-27 08:27:07
【问题描述】:

我正在形成一个 xml,其 sn-p 是 -

<cache-properties>
  <list-cache-hit-rate>
    <units>hits/sec</units>
    <value>1.5308452E6</value>
  </list-cache-hit-rate>
  <list-cache-miss-rate>
    <units>misses/sec</units>
    <value>25422.167</value>
  </list-cache-miss-rate>
  <compressed-tree-cache-hit-rate>
    <units>hits/sec</units>
    <value>970.2339</value>

请注意,1.5308452E6 的值足够大,以至于在后台执行 fn:sum() 时这些值被存储为指数。
后来,我通过以下函数将 xml 转换为 json -

let $arr := json:to-array(local:tojson($data))
return (($data))

转换后的值看起来像这样 -

cache-properties": {
  "list-cache-hit-rate": {
    "units": "hits/sec", 
    "value": 1.5308452E6
  }, 
  "list-cache-miss-rate": {
    "units": "misses/sec", 
    "value": "25422.167"
  }, 
  "compressed-tree-cache-hit-rate": {
    "units": "hits/sec", 
    "value": "970.2339"
  }, 

请注意,除了 1.5308452E6 这个值之外,这些值都用引号括起来。这不在引号中。这里需要什么修正?或者这是正确的吗?我宁愿将所有值都放在引号中。这是我的自定义转换函数-

declare function local:tojson($func){
let $custom := let $config := json:config("custom")
                let $_ := map:put( $config, "whitespace", "ignore" )
                let $_ := map:put( $config, "array-element-names", "Video" )
                return $config
return json:transform-to-json($func,$custom)
};

【问题讨论】:

    标签: xquery marklogic


    【解决方案1】:

    查看 xml 架构。您的 sn-ps 似乎与 marklogic 系统状态 xml 架构相似或相同,但是您在后台提到了“fn:sum”,所以我猜您已经应用了更改 xsd 类型的转换。 json 转换代码在范围内使用 XSD 类型来确定 JSON 中的类型化输出(对于 XML 数字类型)。此外,如果数字“太大”,它可以转换为字符串以避免 JavaScript 问题。
    (它基本上使用 fn:data(value) 来转换)

    如果需要,您可以在 xml 中强制使用字符串类型,或者您可以通过在配置中提供适当的映射来覆盖 json/custom.xqy 中的 json-custom: 原语之一来专门转换。查看源代码以获取可覆盖函数的完整列表。它们没有完全记录在案,因为它们没有考虑到全面的普遍性,并且可能不明显、容易或不可能以各种可能的方式改变行为。

    策略是 在范围内使用具有模式的 XML,显式键入原子值(在您的情况下为 xs:string), 覆盖 custom.xqy 中的低级函数之一 通过后处理转换 JSON 并“字符串化”所需的元素 自己动手(样品展示不太难) 以上都是

    【讨论】:

      猜你喜欢
      • 2012-09-26
      • 2013-01-28
      • 2023-03-09
      • 2012-06-17
      • 2016-04-12
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多