对于一个应用程序,我正在构建一个管理面板,其中高级用户应该能够检查所选对象的 JSON 结构。
我想在计算文本字段中显示 JSON 对象,但可以很好地显示/格式化它,以便更好地阅读,类似于漂亮的打印。
是否有任何我可以在 SSJS 中使用的函数导致类似的结果,以便我可以在计算文本/可编辑字段中很好地使用显示 json?
使用 stringify 的第三个参数"space":
JSON.stringify(yourObject, null, ' ');
space
一个字符串或数字对象,用于将空格插入输出 JSON 字符串以提高可读性。如果这是一个数字,它表示用作空格的空格字符的数量;如果大于此数字,则此数字上限为 10。小于 1 的值表示不应使用空格。如果这是一个字符串,则该字符串(或字符串的前 10 个字符,如果它比那个长)用作空格。如果未提供此参数(或为空),则不使用空格。
正如 Knut 指出的那样,您当然可以添加json2.js
到 XPages;我以前使用过一个实现作为 Marky Roden 的帖子大纲。从 SSJS 的角度来看,这可能是“最安全”的方式。
它确实忽略了XPages 中开箱即用的包含方法fromJson
和toJson
SSJS 方法。虽然不完美,但它们很实用,尤其是包含了 Tommy Valand 的修复片段。请注意,使用 Tommy 的修复程序确实会包装响应,以确保可以通过将 Array 推入具有values
数组属性的对象来解析正确的 JS 对象;所以不能直接拉数组。
此外,我相信指出一个 bean 会很有用,它提供一个或两个方便的方法作为包装器来使用这些com.ibm.commons.util.io.json
方法来抽象转换方法,或者切换到Google GSON 之类的东西,可能会更强大和更统一,基于关于你的发展风格。
克努特,埃里克,我自己已经走到了这一步。
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 工作得很好。