2

json 文字列のすべての値を単一の文字列として取得しようとしています。たとえば、xquery xml

let $x := <a> welcome to the world of <b> JSONiq </b></a>
return string($x)

戻りますwelcome to the world of JSONiq

JSONiq の次のドキュメントの同等の結果は何ですか:

let $y := {"a":"welcome to the world of ","b":" JSONiq"}
return xxxx($y)

結果は同じであるはずwelcome to the world of JSONiq です。JavaScriptも知っていれば素晴らしいでしょう。

4

2 に答える 2

1

libjn:values最初に、またはその定義を使用してすべての値を取得する必要があります。次にfn:string-join、単一の文字列を取得するために使用できます。

そう

declare namespace libjn = "http://jsoniq.org/function-library";
let $y := {"a":"welcome to the world of ","b":" JSONiq"}
return string-join(libjn:values($y) ! string(), "")

また

let $y := {"a":"welcome to the world of ","b":" JSONiq"}
return string-join($y() ! string($y(.)), "")

オブジェクトキーが順不同であるため、これは「JSONiqwelcome to the world of」も返す場合があります。

于 2014-01-13T21:22:52.037 に答える
1

再帰的な JSONiq スクリプトをここで見つけて、試してみてください。タイプスイッチと再帰呼び出しを行うだけでそれができます:

declare function local:strings($v as item()) as xs:string*
{
  typeswitch ($v)
    case $object as object() return
      for $k in jn:keys($object)
        return local:strings($object($k))
    case $array as array() return
      for $member in jn:members($array)
        return local:strings($member)
    default return $v
};

let $y := {"a":"welcome to the world of", "b":" JSONiq", "x":{"d":"m"}}

return string-join(local:strings($y), "@")

「@」は境界線の場所を示すためだけのもので、「」に置き換えることができます:

welcome to the world of@JSONiq@m

ヘルマン。

于 2015-12-13T12:42:00.650 に答える