需要获取动态创建的对象(JSON)的值

时间:2016-04-01 12:56:41

标签: object dynamic pentaho

如何获得PentahoDI中的顶级对象值?我从Json文件的以下示例中获得了其他元素,如Category,Subcategory,section。但是,我需要捕获第一个根对象x@chapter@e50de0196d77495d9b50fc05567b4a4bx@e50de0196d77495d9b50fc05567b4a4b

{
    "x@chapter@e50de0196d77495d9b50fc05567b4a4b": {
        "Category": "chapter", 
        "SubCategory": [
            "x@4eb9072cf36f4d6fa1e98717e6bb54f7", 
            "x@d85849fbde324690b6067f3b18c4258d", 
            "x@3edff1a1864f41fe8b212df2bc96bf13"
        ], 
        "Section": {
            "display_name": "Week 1 Section"
        }
    }, 
    "x@e50de0196d77495d9b50fc05567b4a4b": {
        "category": "course", 
        "Subcategory": [
            "x@e50de0196d77495d9b50fc05567b4a4b"
        ], 
        "Section": {
            "advanced_modules": [
                "google-document"
            ], 
        }
    }
}

在Json输入步骤的“字段”选项卡中,我将名称和路径指定为:类别 - > $ ..类别,子类别 - > $ ..子类别,部分 - > $ ..款。

但是,我无法获得根元素,因为它是我们处理它的关键信息。 ex(x@chapter@e50de0196d77495d9b50fc05567b4a4bx@e50de0196d77495d9b50fc05567b4a4b

我使用以下代码来获取动态对象的值,但它没有用。以下是我用过的代码。

var obj = JSON.parse (JBlock) //Jblock is the one which holds the entire string.
var keys = Object.name( obj);

1 个答案:

答案 0 :(得分:0)

  1. JSONPath无法获取JSON结构的键。这是我与JSONPath的主要问题之一,我希望Pentaho包含其他JSON解析引擎。

  2. Modified Java Script Value中使用的JavaScript适用于我。在字段编辑器中添加一个值,如下所示:

  3. enter image description here

    然后是这样的剧本:

    var obj = JSON.parse(JBlock);
    var keys = Object.keys(obj);
    for (var i = 0; i < keys.length; i++) {
        var row = createRowCopy(getOutputRowMeta().size());
        var idx = getInputRowMeta().size();
        row[idx++] = keys[i];
        putRow(row);
    }
    trans_Status = SKIP_TRANSFORMATION;