如何从jsoniq或javascript中的json文件中获取所有字符串?

时间:2014-01-12 19:41:49

标签: xquery jsoniq

我试图将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中也知道它会很棒。

2 个答案:

答案 0 :(得分: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”,因为对象键是无序的

答案 1 :(得分:1)

找出用于尝试的递归JSONiq脚本here。 只是做类型切换和递归调用就可以了:

welcome to the world of@JSONiq@m

&#34; @&#34;仅用于显示边框的位置,可以用&#34;&#34;:

替换
var getDataSourcePromise = function(table, profileId) {
    var deferred = Q.defer();

    table.retrieveEntity(tableName, profileId, profileId, function(err, result, response) {
        if (err) {
            deferred.reject(Error(err));
        }
        else {
            deferred.resolve(result);
        }
    });

    return deferred.promise;
}

var promises = [];
tables.forEach(function(table, profileId) {
    promises.push(getDataSourcePromise(table, profileId.toString()));
});

console.log('waiting for settle');

Q.any(promises).then(function(result) {
    console.log(result);
});

赫尔曼。