0

对于一个应用程序,我正在构建一个管理面板,其中高级用户应该能够检查所选对象的 JSON 结构。

我想在计算文本字段中显示 JSON 对象,但可以很好地显示/格式化它,以便更好地阅读,类似于漂亮的打印。

是否有任何我可以在 SSJS 中使用的函数导致类似的结果,以便我可以在计算文本/可编辑字段中很好地使用显示 json?

4

3 回答 3

2

使用 stringify 的第三个参数"space"

JSON.stringify(yourObject, null, '  ');

space
一个字符串或数字对象,用于将空格插入输出 JSON 字符串以提高可读性。如果这是一个数字,它表示用作空格的空格字符的数量;如果大于此数字,则此数字上限为 10。小于 1 的值表示不应使用空格。如果这是一个字符串,则该字符串(或字符串的前 10 个字符,如果它比那个长)用作空格。如果未提供此参数(或为空),则不使用空格。

由于 XPages 不支持 JSON.stringify 但您可以将JSON 的定义包含为 SSJS 资源并使用它

于 2016-12-21T12:27:05.480 回答
2

正如 Knut 指出的那样,您当然可以添加json2.js到 XPages;我以前使用过一个实现作为 Marky Roden 的帖子大​​纲。从 SSJS 的角度来看,这可能是“最安全”的方式。

它确实忽略了XPages 中开箱即用的包含方法fromJsontoJsonSSJS 方法。虽然不完美,但它们很实用,尤其是包含了 Tommy Valand 的修复片段。请注意,使用 Tommy 的修复程序确实会包装响应,以确保可以通过将 Array 推入具有values数组属性的对象来解析正确的 JS 对象;所以不能直接拉数组。

此外,我相信指出一个 bean 会很有用,它提供一个或两个方便的方法作为包装器来使用这些com.ibm.commons.util.io.json方法来抽象转换方法,或者切换到Google GSON 之类的东西,可能会更强大和更统一,基于关于你的发展风格。

于 2016-12-21T14:29:16.450 回答
0

克努特,埃里克,我自己已经走到了这一步。

function prettyPrint(id) {
    var ugly = dojo.byId(id).value;
    var obj = $.parseJSON( "[" + ugly + "]" );
    var pretty = JSON.stringify(obj, undefined, 4);    
    dojo.byId(id).innerHTML = pretty;
}

我称之为例如

var name = x$('#{id:input-currentObjectCollectionFiltered}').attr("name");
prettyPrint(name);

我尝试使用 x$ 函数,但无法在其中使 ID 动态化,例如

var ugly = x$('#{id:" + id + "}').val();

不知道为什么。如果我只是调用 prettyPrint('input-currentObjectCollectionFiltered'); 会更好 并且该功能会弄清楚。

而不是 dojo.byId(id).value 我试过:

var ugly=$("#" + id).val();

但事情返回和未定义的对象:我认为使用动态 id 的 jquery 会更聪明。

无论如何 stringify 工作得很好。

于 2016-12-21T19:59:58.597 回答