【发布时间】:2016-12-21 11:27:31
【问题描述】:
对于一个应用程序,我正在构建一个管理面板,高级用户应该能够在其中检查所选对象的 JSON 结构。
我想在计算文本字段中显示 JSON 对象,但要很好地显示/格式化它,以便更好地阅读,类似于漂亮的打印。
是否有任何我可以在 SSJS 中使用的函数产生类似的结果,以便我可以在计算文本/可编辑字段中很好地使用显示 json?
【问题讨论】:
对于一个应用程序,我正在构建一个管理面板,高级用户应该能够在其中检查所选对象的 JSON 结构。
我想在计算文本字段中显示 JSON 对象,但要很好地显示/格式化它,以便更好地阅读,类似于漂亮的打印。
是否有任何我可以在 SSJS 中使用的函数产生类似的结果,以便我可以在计算文本/可编辑字段中很好地使用显示 json?
【问题讨论】:
使用stringify的第三个参数"space":
JSON.stringify(yourObject, null, ' ');
空格
用于插入白色的字符串或数字对象 出于可读性目的,在输出 JSON 字符串中留出空格。如果这是 一个数字,它表示用作白色的空格字符的数量 空间;如果大于此数字,则此数字上限为 10。价值观 小于 1 表示不应使用空格。如果这是一个 String,字符串(或字符串的前 10 个字符,如果是 比那个长)用作空白。如果没有这个参数 提供(或为空),不使用空格。
由于 XPages 不支持 JSON.stringify,但您可以将 JSON's definition 包含为 SSJS 资源和 use it。
【讨论】:
正如 Knut 指出的,您当然可以将 json2.js 添加到 XPages;我以前使用过一个实现as Marky Roden's post outlines。从 SSJS 的角度来看,这可能是“最安全”的方式。
它确实忽略了 XPages 中开箱即用的 included fromJson and toJson SSJS methods。虽然不完美,但它们很实用,尤其是 the inclusion of Tommy Valand's fix snippet。请注意,使用 Tommy 的修复程序确实会包装响应,以确保可以通过将 Array 推入具有数组 values 属性的对象来解析正确的 JS 对象;所以不能直接拉数组。
此外,我认为指出一个 bean 提供一个或两个便利方法作为包装器以使用 com.ibm.commons.util.io.json 方法来抽象转换方法或切换到类似 Google GSON 的方法会很有用根据您的开发风格变得更加强大和统一。
【讨论】:
toJson(myVar) 应该是 SSJS 中最简单的;至少就 XPage 附带的功能而言。
克努特,埃里克,我自己已经走了这么远了。
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();
但是事情返回和未定义的对象:我认为 jquery 使用动态 id 会更聪明。
无论如何 stringify 工作得很好。
【讨论】:
var ugly = x$('#{id:" + ${javascript:id} + "}').val();?